与意图共享资源图像

Share a resource image with intents

我正在尝试共享存储在我的应用程序的 raw 资源文件夹中的 image/jpg,但是 Intent 似乎找不到图像资源并且没有发送任何内容。

这是我的发送代码(在 Kotlin 中):

val current = filePaths!![mViewPager!!.currentItem]
val uri = Uri.parse("android.resource://" + getPackageName() + "/" + current.resourceId)
val shareIntent : Intent = Intent()
shareIntent.setAction(Intent.ACTION_SEND)
shareIntent.putExtra(Intent.EXTRA_STREAM, uri)
shareIntent.setType("image/*")
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)))

我也试过这样发送Uri

val uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + File.pathSeparator + File.separator + File.separator + getPackageName() + "/raw/" + filename)

但它也不起作用。有人可以帮我吗?

The Uri passed via EXTRA_STREAM needs to be a content Uri。虽然一些支持 ACTION_SNED 的应用程序更灵活,但很少有人会处理 almost-completely-unused android.resource 方案。

实施 ContentProvider 来提供您的内容,并在 Intent 中为该内容使用 Uri。此外,在您的 Intent 中使用具体的 MIME 类型 — 这是 您的 内容,因此您知道 MIME 类型是什么。

经过3天的头痛我终于解决了...我所做的只是保存图像资源然后服务它:

val current = filePaths!![mViewPager!!.currentItem]

val imagePath = File(Environment.getExternalStorageDirectory(), "_temp")

if(!imagePath.exists())
   imagePath.mkdirs()

 val imageToShare = File(imagePath, "share.jpeg")

if(imageToShare.exists())
    imageToShare.delete()

 imageToShare.createNewFile()

 val out = FileOutputStream(imageToShare)
 val imageToSave = utils.createBitmap(current.resourceId)
 imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, out)
 out.flush()
 out.close()

 val uri = Uri.fromFile(imageToShare)

 val shareIntent : Intent = Intent()
 shareIntent.setAction(Intent.ACTION_SEND)
 shareIntent.putExtra(Intent.EXTRA_STREAM, uri)
 shareIntent.setType("image/jpeg")
 startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)))

:)