【问题标题】:Getting shared image from Google Photos app从 Google 相册应用获取共享图片
【发布时间】:2017-05-19 16:21:04
【问题描述】:

接下来的问题是:我的应用通过清单中的意图过滤器从 Google 相册接收图像

<intent-filter android:label="@string/app_name">
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />

        <data android:mimeType="text/*" />
        <data android:mimeType="image/*" />
    </intent-filter>

然后我得到这样的uri:

mSharedImageUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);

然后我将事件发送到 Fragment 并使用此 Fragment 启动另一个 Activity,该 Fragment 接收到带有共享图像 uri 的事件。请求“READ_EXTERNAL”权限,授予权限后使用 getContentResolver().openInputStream(uri) 获取 Exif 数据,目前我得到下一个:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=75542, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.my.app/com.my.app.activities.Activity}: java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.contentprovider.impl.MediaContentProvider from ProcessRecord{be2762c 9157:com.my.app/u0a931} (pid=9157, uid=10931) that is not exported from uid 10086
                                                                     at android.app.ActivityThread.deliverResults(ActivityThread.java:3940)
                                                                     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3983)
                                                                     at android.app.ActivityThread.-wrap16(ActivityThread.java)
                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1548)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:111)
                                                                     at android.os.Looper.loop(Looper.java:207)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:5765)
                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
                                                                  Caused by: java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.contentprovider.impl.MediaContentProvider from ProcessRecord{be2762c 9157:com.my.app/u0a931} (pid=9157, uid=10931) that is not exported from uid 10086

但是,如果在第一个 Activity 上请求权限或此时授予权限,则一切正常。 你能给我一个建议吗?它是在更早的时候工作的,例如大约一山前。

【问题讨论】:

  • 您好,请问您找到解决方法了吗,我也遇到了这个问题,请帮忙
  • @BHARATGUPTA 是的,我只是在接收图像 URI 的 Activity 中请求 READ_EXTERNAL_STORAGE,并且在授予权限后一切正常。
  • 嘿,谢谢。但问题有些不同。实际上,我正在将 URI 传递给另一个出现问题的活动。实际的方法是在请求谷歌照片应用程序的同一活动中从 URI 获取文件并在您的应用程序中传递文件。

标签: android security google-photos


【解决方案1】:

并使用此 Fragment 启动另一个 Activity,该 Fragment 接收到带有共享图像 uri 的事件

Intent 上调用addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION),您可以将Uri 传递给其他活动。否则,该活动将无法访问内容。

【讨论】:

  • 对不起,它不起作用。我得到了相同的堆栈跟踪
  • 您有什么其他建议吗?或者您能否解释一下为什么会发生这种情况。
  • @RuslanLeshchenko:请编辑您的问题以显示您如何开始第二个活动以及该活动如何生成堆栈跟踪。
  • 事情是Fragment中产生了异常。 then I send event to Fragment and start another Activity with this Fragment which is received event with shared image uri. 在事件总线的帮助下,我将带有图像 uri 的事件发送到片段,然后启动一个包含此片段的活动,当片段启动时,事件被捕获并请求权限。授予权限后,我使用getContentResolver().openInputStream(uri) 获取 Exif 数据,此时我得到了异常。
  • 我也遇到同样的问题,有人解决了吗?
猜你喜欢
  • 2016-08-30
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多