通过共享发送图像:仅发送一个奇怪的号码,没有文件扩展名

时间:2018-03-21 08:43:31

标签: android kotlin kotlin-android-extensions

我实现了一个分享按钮(代码用Kotlin编写),它已经可以将文本发送到whatsapp / email等。

现在我也想发送一个图片,但在尝试了几个教程之后,它仍然显示相同的错误:

而不是图片" image27.png",只有未定义的损坏文件" 2131099738"发送。

这是我的代码:

package com.example.myapp
...
share_button.setOnClickListener {
        val shareIntent = Intent(Intent.ACTION_SEND)
        shareIntent.type = "image/png"

        val shareImageURI = Uri.parse("android.resource://com.example.myapp/drawable/"+R.drawable.image27)

        val shareSub = "This is for you"
        val shareBody = message 
        shareIntent.putExtra(Intent.EXTRA_STREAM, shareImageURI)
        shareIntent.putExtra(Intent.EXTRA_SUBJECT, shareSub)
        shareIntent.putExtra(Intent.EXTRA_TEXT, shareBody)
        startActivity(Intent.createChooser(shareIntent, "Share this"))
    }

图片保存在此处:C:\Users\Bine\AndroidStudioProjects\MyApp\app\src\main\res\drawable\image27.png

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这种行为是有意的。你现在要做的是从你的应用程序中分享一个drawable,但我认为这不会起作用,因为每个Android app runs in a Sanbox

  

Android应用程序沙箱,它将您的应用程序数据和代码执行与其他应用程序隔离开来。

但是,为了更好地了解您的问题,您必须了解R class。简而言之,它是由系统生成的类,它包含对资源目录中找到的所有内容的引用,包括您正在使用的drawables。这里的重要部分是每次对资源的引用都会保存为int变量,因此当您尝试使用2131099738时,R.drawable.image27.png会出现在那里(请注意,如果您进行了任何更改对于资源来说,这个数字很可能会发生变化)。

要解决此问题,您有两种方法:

  1. 将文件存储在external storage;
  2. 使用ContentProvider访问该文件。