如何在 Android Kotlin 中使用 Intent 位图共享图像?

问题描述 投票:0回答:1

我正在使用 Kotlin 开发 Android 应用程序,我需要将生成为位图的图像共享给其他应用程序(例如社交媒体或消息应用程序)。我想为此使用 Intent,但我不确定将位图转换为 Uri 并使其可供其他应用程序访问的最佳方法。

这是我迄今为止尝试过的:

  1. 创建了一个位图并将其保存到缓存中。
  2. 尝试使用 Intent 共享图像,但我遇到了 URI 权限问题。

我想使用意图将图像作为位图共享,并且其他应用程序应该可以访问它而无需出现权限问题。

这是在 Android 中通过意图共享位图图像的正确方法吗?我是否缺少任何步骤来确保外部应用程序可以访问 Uri?

android kotlin android-intent bitmap android-fileprovider
1个回答
0
投票

好吧,正如您所说,您将图像共享到另一个应用程序,并且您已准备好将位图保存到缓存中。

然后你需要在 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 的临时读取访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.