Android: 通过 content:// URI 从第三方应用程序(例如 WhatsApp)获取图像位图

Android: Getting image bitmap from third party app (e.g. WhatsApp) via content:// URI

我正在尝试从第三方应用程序(例如 WhatsApp)获取图像到我的应用程序(正在 Marshmallow 上测试)。当我从 WhatsApp 执行 "share image" 并与我的应用程序共享时,我得到的 URI 是这样的:

content://com.whatsapp.provider.media/item/61025

但是在我的应用程序中,当我使用上述 URI 调用 getContentResolver().openInputStream(uri)getContentResolver().openFileDescriptor(uri, "r") 时,它崩溃并出现异常:

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"/>

但对此不满意,因为可能有很多应用程序并且需要为每个应用程序添加权限等等。

在其他一些 中,建议立即 read/copy 来自内容提供商的数据。但不确定如何。因为我在 openInputStream 本身得到异常。

我还必须提到,WhatsApp 图像可以成功地与其他应用程序共享(例如 Google Drive),因此必须有一些方法可以做到这一点。

有人可以就此提供共享提示或工作解决方案吗?

好的。我发现问题出在哪里。在我的应用程序的初始 activity 中,我存储了内容 URI(这是我从 WhatsApp 或 Chrome 等第三方应用程序获得的,例如 content://com.whatsapp.provider.media/item/61025)在数组中并从其他 activity.

访问它

那是正确的。我从 的回答中得到提示,并且在我获得共享内容后立即从应用程序的启动器 activity 调用了 getContentResolver().openInputStream(uri)。它起作用了,没有抛出任何异常。