【问题标题】:Directly Share an Image to Facebook, Twitter, Instagram, WhatsApp ect直接将图像分享到 Facebook、Twitter、Instagram、WhatsApp 等
【发布时间】:2020-12-09 10:14:03
【问题描述】:

在我的应用程序中,有多个按钮(FB 分享、Twitter 分享、Insta 分享等)可以将图像分享到社交媒体。还有一个More 按钮显示用户设备的所有共享功能列表以共享用户选择。我已成功使用 More 按钮显示所有共享选项(这里我使用 FileProvider)。但是其他按钮(没有这个“更多”按钮)我无法工作。例如,当用户单击FB share 按钮时,应直接打开 Facebook 应用程序并在 创建帖子 上加载图像(其中写有“What's你的想法") 将图像分享到 Facebook 的选项。我已将 FB 包设置为意图。但它只是打开 Facebook 应用程序(什么都不做,只是打开 FB 应用程序主页)。但是在More 按钮上有一个FB 选项News feed,如果单击此按钮,则可以成功地将图像发送到创建帖子 选项。 p>

任何人都可以提供在任何社交媒体上分享图像的解决方案吗?我看过 Facebook SDK。但我认为有一个更简单的解决方案,我不知道。因为有这么多社交媒体(虽然我只实现了 4 个)。

提前致谢。

【问题讨论】:

标签: facebook android-studio instagram share whatsapp


【解决方案1】:

我已经从我的师兄那里解决了我的问题。我刚刚在我的旧共享代码上添加了一行 intent.setPackage(packageId)。然后它起作用了。完整的流程如下。

第 1 步。AndroidManifest.xml 的应用程序块中添加这些行。

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths">
        </meta-data>
    </provider>

第 2 步。res/xml 文件夹中创建一个 file_path.xml 文件(如果 xml 文件夹不可用,则创建它)。在 file_path.xml 文件中过去这段代码。

<?xml version="1.0" encoding="utf-8"?>
<paths>
     <external-files-path name="my_images" path="/" />

     <!--For Share-->
     <external-path name="external_files" path="." />
     <cache-path name="cache_files" path="/"/>
</paths>

第 3 步。 创建一个 ShareUtils.kt 对象文件并通过此代码。

package com.example.riz1.utils

import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.core.content.FileProvider
import com.liilab.photo_editor.BuildConfig
import java.io.File

object ShareUtils {
  interface FileUriCreator { val uri: Uri }

  fun shareImage(context: Context, imagePath: String, packageId: String){

    if (packageId!=AppConstants.DEFAULT_PACKAGE_ID && context.packageManager.getLaunchIntentForPackage(packageId) == null) {
        context.customToast("Please first install the app")
        context.startActivity(Intent(Intent.ACTION_VIEW,
                Uri.parse("https://play.google.com/store/apps/details?id=$packageId")
        ))
    }else{
        val fileUriCreator = object : FileUriCreator {
            override val uri: Uri get() = FileProvider.getUriForFile(context,
                     BuildConfig.APPLICATION_ID + ".fileprovider", File(imagePath))
        }
        try {
            val intent = Intent(Intent.ACTION_SEND)
            if (packageId!=AppConstants.DEFAULT_PACKAGE_ID) intent.setPackage(packageId)
            intent.type = "image/jpeg"
            intent.putExtra(Intent.EXTRA_STREAM, fileUriCreator.uri)
            context.startActivity(Intent.createChooser(intent, "Share Image"))
        } catch (ex: Exception) {
            context.customToast("Please first install the app")
            context.startActivity(Intent(Intent.ACTION_VIEW,
                    Uri.parse("https://play.google.com/store/apps/details?id=$packageId")
            ))
        }
    }
  }
}

现在只需调用 ShareUtils.shareimage(context,ImagePath, packageId)。如果您想打开默认共享列表,只需删除 intent.setPackage(packageId) 并且 packageId 可以为空。

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    相关资源
    最近更新 更多