直接将图像分享到 Facebook、Twitter、Instagram、WhatsApp 等
Directly Share an Image to Facebook, Twitter, Instagram, WhatsApp ect
在我的应用程序中,有多个按钮(FB 分享、Twitter 分享、Insta 分享等)可以将图像分享到社交媒体。还有一个 More
按钮来显示用户设备的所有共享功能列表以共享用户选择。我已经成功地使用 More
按钮来显示所有共享选项(这里我使用 FileProvider)。但是其他按钮(没有这个“更多”按钮)我无法工作。例如,当用户单击 FB share
按钮时,应直接打开 Facebook 应用程序并将图像加载到 创建一个 post(写着“What's your mind”)选项,用于将图片分享到 Facebook。我已将 FB 包设置为意图。但它只是打开 Facebook 应用程序(什么都不做,只是打开 FB 应用程序主页)。但是在 More
按钮上有一个 FB 选项 News feed
,如果点击这个然后它成功地将图像发送到 创建一个 post 选项。
任何人都可以提供在任何社交媒体上分享图像的解决方案吗?我看过 Facebook SDK。但我认为有一个我不知道的更简单的解决方案。因为社交媒体太多了(虽然我只实现了4个)。
提前致谢。
师兄解决了我的问题。我刚刚在我的旧共享代码上添加了一行 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 可以为空。
在我的应用程序中,有多个按钮(FB 分享、Twitter 分享、Insta 分享等)可以将图像分享到社交媒体。还有一个 More
按钮来显示用户设备的所有共享功能列表以共享用户选择。我已经成功地使用 More
按钮来显示所有共享选项(这里我使用 FileProvider)。但是其他按钮(没有这个“更多”按钮)我无法工作。例如,当用户单击 FB share
按钮时,应直接打开 Facebook 应用程序并将图像加载到 创建一个 post(写着“What's your mind”)选项,用于将图片分享到 Facebook。我已将 FB 包设置为意图。但它只是打开 Facebook 应用程序(什么都不做,只是打开 FB 应用程序主页)。但是在 More
按钮上有一个 FB 选项 News feed
,如果点击这个然后它成功地将图像发送到 创建一个 post 选项。
任何人都可以提供在任何社交媒体上分享图像的解决方案吗?我看过 Facebook SDK。但我认为有一个我不知道的更简单的解决方案。因为社交媒体太多了(虽然我只实现了4个)。
提前致谢。
师兄解决了我的问题。我刚刚在我的旧共享代码上添加了一行 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 可以为空。