我正在尝试从第三方应用程序(例如WhatsApp)获取图像到我的应用程序(在Marshmallow上进行测试)。当我从WhatsApp“分享图像”并与我的应用程序共享时,我得到这样的URI:
content://com.whatsapp.provider.media/item/61025
但在我的应用中,当我使用上述URI调用getContentResolver().openInputStream(uri)
或getContentResolver().openFileDescriptor(uri, "r")
时,它会因异常而崩溃:
java.lang.SecurityException:Permission Denial:打开提供者 来自ProcessRecord的com.whatsapp.MediaProvider {a4b804a 30321:com.myapp / u0a145}(pid = 30321,uid = 10145)未导出 来自uid 10083
到目前为止我尝试了什么
我在SO上查找了此异常并发现了similar question,但是要从Google相片中导入图片,并且需要添加以下权限:
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>
但是没有对此感到满意,因为可能有很多应用,需要为每个应用添加权限或者是什么。
在其他一些answers中,建议立即从内容提供商处读取/复制数据。但不确定如何。因为我在openInputStream
本身得到了例外。
我还必须提到WhatsApp图像可以与其他应用程序(例如Google Drive)成功共享,因此必须有一些方法可以做到这一点。
请有人可以提供分享提示或工作解决方案吗?
答案 0 :(得分:2)
确定。我发现问题出在哪里。在我的应用程序的初始活动中,我将内容URI(我从WhatsApp或Chrome等第三方应用程序获取,例如内容://com.whatsapp.provider.media/item/61025)存储在数组中,并从其他活动。
那是不正确。我从this回复中得到提示,并在收到共享内容后立即从应用程序的启动器活动中调用了getContentResolver().openInputStream(uri)
。它起作用了,没有任何例外。