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

问题描述:

我想从第三方应用程序(例如WhatsApp)获取图像到我的应用程序(正在测试棉花糖)。当我从WhatsApp的做“共享图像”,并与我的应用程序共享,我得到的URI是这样的:Android:通过内容从第三方应用程序(例如WhatsApp)获取图像位图:// URI

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

但在我的应用程序时,我打电话getContentResolver().openInputStream(uri)getContentResolver().openFileDescriptor(uri, "r")以上URI,它具有异常崩溃:

java.lang.SecurityException异常:权限拒绝:开口提供商 从ProcessRecord com.whatsapp.MediaProvider {a4b804a 30321:com.myapp/u0a145}(PID = 30321,UID = 10145),其不导出 从uid 10083

我试了一下,到目前为止

我看了这个例外在SO,发现similar question构成,而是由谷歌的照片导入图像,并得到了需要添加的权限,如:

<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>

但由于可能有很多应用程序,并且需要为它们中的每一个添加权限或者什么,因此不太容易理解。

在其他一些answers已建议立即从内容提供商读取/复制数据。但不知道如何。因为我在openInputStream本身得到异常。

我还必须提及的是,WhatsApp图像可以与其他应用程序(例如Google Drive)成功共享,因此必须有一些方法可以执行此操作。

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

+0

您是否有权限从外部存储读取并在运行时检查它? –

+0

该提供商没有出口,只有一些有限的软件包子集可以访问它(如谷歌驱动器),但你的应用程序不允许这样做 – pskink

+0

@Nabin是的,我有权限 – Atul

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

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

+0

您能否提供示例代码以获取来自内容的路径://com.whatsapp.provider.media/item/45856 –

+0

不尝试从URI获取路径它不正确的处理URI的方式。而是使用'getContentResolver()。openInputStream(uri)' – Atul

+0

getContentResolver()。openInputStream(uri)返回什么?我完全困惑 –