与意图共享资源图像
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)))
:)
我正在尝试共享存储在我的应用程序的 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)))
:)