【问题标题】:Share a resource image with intents与意图共享资源图像
【发布时间】:2018-04-02 13:47:27
【问题描述】:

我正在尝试共享存储在我的应用程序的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)

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

【问题讨论】:

    标签: android android-intent android-resources android-sharing


    【解决方案1】:

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

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

    【讨论】:

    • 您会看到,在我的应用程序中,图像存储在“原始”资源文件夹中...我已经搜索了如何为资源创建 ContentProvider 但没有看...我'将尝试在本地存储图像的文件“副本”,然后提供该副本...非常感谢!
    • @charli3B:“我会尝试在本地存储图像的文件“副本”,然后提供该副本”——然后您可以使用 FileProvider 提供图像。
    【解决方案2】:

    头疼了 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)))
    

    :)

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多