簡體   English   中英

如何從 Kotlin 中的 Android 應用程序發送文本和圖像?

[英]How can I tweet texts and images from an Android App in Kotlin?

我想做什么

我想從 Android 應用程序中發送文本和圖像。

我能夠在應用程序的屏幕上放置要推文的圖像,該應用程序可以通過按鈕打開推文表單。

作為參考,我檢查了以下前一個問題。

如何在android中使用ACTION_SEND一起共享圖像+文本?

問題

問題是程序上設置的文本和圖像數據沒有出現在推特上。

它只顯示空白的推文表格。

如何將這些文本和圖像從 Android 應用程序移動到推文表單?

代碼

主活動.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()
    }
     */
}

活動_main.xml

<?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

環境

安卓工作室 3.5.3

Kotlin 插件 1.3.50

嘗試這個

 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 "";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM