我正在使用 Kotlin 开发 Android 应用程序,我需要将生成为位图的图像共享给其他应用程序(例如社交媒体或消息应用程序)。我想为此使用 Intent,但我不确定将位图转换为 Uri 并使其可供其他应用程序访问的最佳方法。
这是我迄今为止尝试过的:
我想使用意图将图像作为位图共享,并且其他应用程序应该可以访问它而无需出现权限问题。
这是在 Android 中通过意图共享位图图像的正确方法吗?我是否缺少任何步骤来确保外部应用程序可以访问 Uri?
好吧,正如您所说,您将图像共享到另一个应用程序,并且您已准备好将位图保存到缓存中。
然后你需要在 AndroidManifest.xml 中添加 File Provider
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
之后您需要在
res/xml
文件夹中创建一个xml文件file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="images" path="images/" />
</paths>
最后您使用下面创建的共享图像功能来共享该图像
fun shareImage(context: Context, bitmap: Bitmap) {
val uri = saveBitmapToCache(bitmap, context) ?: return
val shareIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, uri)
type = "image/png"
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
context.startActivity(Intent.createChooser(shareIntent, "Share Image"))
}
FileProvider:确保其他应用程序可访问 URI。
FLAG_GRANT_READ_URI_PERMISSION:授予 URI 的临时读取访问权限。