我正在尝试从第三方应用程序(例如 WhatsApp)获取图像到我的应用程序(正在 Marshmallow 上测试)。当我从 WhatsApp“分享图片”并与我的应用分享时,我得到的 URI 是这样的:
content://com.whatsapp.provider.media/item/61025
但是在我的应用程序中,当我调用 getContentResolver().openInputStream(uri)
时或 getContentResolver().openFileDescriptor(uri, "r")
使用上述 URI,它会异常崩溃:
java.lang.SecurityException: Permission Denial: opening provider com.whatsapp.MediaProvider from ProcessRecord{a4b804a 30321:com.myapp/u0a145} (pid=30321, uid=10145) that is not exported from uid 10083
到目前为止我尝试了什么
我在 SO 上查找此异常并找到 similar question摆姿势,但要从 Google Photos 导入图片并需要添加权限,例如:
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>
但对此并不满意,因为可能有很多应用程序并且需要为每个应用程序或其他什么添加权限。
在其他一些answers建议立即从内容提供者读取/复制数据。但不确定如何。因为我在 openInputStream
中遇到异常本身。
我还必须提到,WhatsApp 图片可以成功地与其他应用程序(例如 Google 云端硬盘)共享,因此必须有某种方法可以做到这一点。
请有人可以就此提供共享提示或工作解决方案?
最佳答案
好的。我发现问题出在哪里。在我的应用程序的初始 Activity 中,我将内容 URI(我从 WhatsApp 或 Chrome 等第三方应用程序获得,例如 content://com.whatsapp.provider.media/item/61025)存储在一个数组中,并从其他 Activity 。
那是不正确的。我从 this 得到提示answer 并且我在获取共享内容后立即从应用程序的启动器 Activity 中调用了 getContentResolver().openInputStream(uri)
。它起作用了,没有抛出任何异常。
关于Android:通过 content://URI 从第三方应用程序(例如 WhatsApp)获取图像位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46578918/