当前位置: 首页 > 知识库问答 >
问题:

我如何在Kotlin的Android应用上发布文本和图片?

夏经武
2023-03-14

我想从一个Android应用程序推文和图片。

我可以把一个图片放在一个应用程序的屏幕上推特,而应用程序可以通过一个按钮打开推特表单。

它只显示空白的tweet表单

我如何将这些文字和图像从Android应用程序移动到tweet表单?

mainactivity.kt

package com.example.tweets

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import android.content.Intent
import android.net.Uri
import android.util.Log
import androidx.core.app.ShareCompat
import java.io.File
import android.R.attr.path
import android.graphics.BitmapFactory
import kotlinx.android.synthetic.main.activity_main.*
import androidx.core.app.ComponentActivity.ExtraData
import androidx.core.content.ContextCompat.getSystemService
import android.icu.lang.UCharacter.GraphemeClusterBreak.T
import java.io.IOException


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        try {resources.assets.open("sample.jpg").use { istream ->
            val bitmap = BitmapFactory.decodeStream(istream)
            sample.setImageBitmap(bitmap)
        }
        } catch (e: IOException) {
            e.printStackTrace()
        }


        val intentTweetButton: Button = findViewById(R.id.intentTweetButton)
        intentTweetButton.setOnClickListener {
            shareTwitter()
        }

        /*

        val shareCompatButton: Button = findViewById(R.id.shareCompatButton)
        shareCompatButton.setOnClickListener {
            shareCompat()
        }
        */
    }

    fun shareTwitter() {
        val message = "shareTwitter intent tweet"
        val bmpUri = Uri.parse("file://$path")
        try {
            val sharingIntent = Intent(Intent.ACTION_SEND)
            sharingIntent.setClassName("com.twitter.android", "com.twitter.android.PostActivity")
            val imageUri = Uri.parse("sample.jpg")
            sharingIntent.putExtra(Intent.EXTRA_TEXT, "Hello")
            sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri)
            sharingIntent.type = "image/jpeg"
            sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            startActivity(sharingIntent)
        }
        catch (e: Exception) {
            Log.e("In Exception", "Comes here")
            val i = Intent()
            i.putExtra(Intent.EXTRA_TEXT, message)
            i.action = Intent.ACTION_VIEW
            i.data = Uri.parse("https://mobile.twitter.com/compose/tweet")
            startActivity(i)
        }

    }

    /*

    fun shareCompat() {
        val message = "shareCompat"
        val builder = ShareCompat.IntentBuilder.from(this)
        builder.setChooserTitle("Choose App")
        builder.setText(message)
        builder.setType("text/plain")
        builder.addStream(Uri.fromFile(File("sample.jpg")))
        builder.setType("image/jpg")
        builder.startChooser()
    }
     */
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/sample"
        android:scaleType="centerCrop"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@string/img_description"
        tools:ignore="InvalidId" />

    <Button
        android:id="@+id/intentTweetButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="intent tweet"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!--
    <Button
        android:id="@+id/shareCompatButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="ShareCompat"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/intentTweetButton" />
     -->

</androidx.constraintlayout.widget.ConstraintLayout>

我尝试使用share compat而不是intent,但也不起作用。

此外,share compat仅适用于在手机上下载了Twitter应用程序的用户,所以我更喜欢使用intent从Android应用程序中发布文本和图像。

该图像位于app/assets/sample.jpg上。

Android Studio 3.5.3

Kotlin插件1.3.50

共有1个答案

殳自怡
2023-03-14

试试这个

 private void shareTwitter(String message) {
    Intent tweetIntent = new Intent(Intent.ACTION_SEND);
    tweetIntent.putExtra(Intent.EXTRA_TEXT, "This is a Test.");
    tweetIntent.setType("text/plain");

    PackageManager packManager = getPackageManager();
    List<ResolveInfo> resolvedInfoList = packManager.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);

    boolean resolved = false;
    for (ResolveInfo resolveInfo : resolvedInfoList) {
        if (resolveInfo.activityInfo.packageName.startsWith("com.twitter.android")) {
            tweetIntent.setClassName(
                    resolveInfo.activityInfo.packageName,
                    resolveInfo.activityInfo.name);
            resolved = true;
            break;
        }
    }
    if (resolved) {
        startActivity(tweetIntent);
    } else {
        Intent i = new Intent();
        i.putExtra(Intent.EXTRA_TEXT, message);
        i.setAction(Intent.ACTION_VIEW);
        i.setData(Uri.parse("https://twitter.com/intent/tweet?text=" + urlEncode(message)));
        startActivity(i);
        Toast.makeText(this, "Twitter app isn't found", Toast.LENGTH_LONG).show();
    }
}

private String urlEncode(String s) {
    try {
        return URLEncoder.encode(s, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        Log.wtf(TAG, "UTF-8 should always be supported", e);
        return "";
    }
}
 类似资料:
  • 我运行 2 命令 keytool -genkeypair -alias upload -keyalg RSA -keysize 2048 -有效期 9125 -keystore keystore.jks 此命令创建keystore.jks。将该密钥的证书导出为PEM格式(upload _ certificatie.pem)。我会附上upload _ certificatie.pem,回复Googl

  • 问题内容: 我试图在Eclipse中将文本字段添加到我的Android应用程序中,但是随后我将该选项拖到图形布局上,底部出现一条消息。它显示为 即使我去也没有错误日志选项。整个设计器现在已经没有用了,因为直到直接从xml中删除,我才能使用它。是什么导致此错误,我该如何解决?我正在运行最新版本(截至今天,6月30日至14日)和Windows 8 Pro x64。 这是我的完整布局代码: 问题答案:

  • 我有一张图片上面有文字。我需要从图像中提取文本。 例如:假设我有一个图像,在图像之上我有一个标志“诺基亚”。我想从图像中提取作为文本的徽标。

  • 在这段代码中,我需要一个新的行之前谢谢!但是我没有得到任何新的线我是新的android开发所以,不能指出错误。

  • 最近我在研究Kotlin。首先,kotlin不支持。 所以我使用

  • 我想在片段中创建一个recyclerView,但它显示错误“java.lang.IllegalStateException:recylerView_Main必须不是null at com.gph.bottomNavigation.FragmentMe.onCreateView(FragmentMe.kt:28)” 问题1)请帮助解决此问题。 问题2)我只在没有任何片段的空项目中创建了一个recyc