android - 尝试在运行 4.2 的设备上访问 Picasa 图像时出现安全异常

标签 android android-permissions

在我的应用程序中,我让用户从图库中选择图像,并且在 4.2 之前执行此操作没有问题,但现在当我选择从我的 google+ 帐户同步的图像时,我猜这是 Picasa 图像我收到此错误

11-25 20:31:52.508: E/AndroidRuntime(17387): java.lang.RuntimeException: An error occured while executing doInBackground()
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at java.lang.Thread.run(Thread.java:856)
11-25 20:31:52.508: E/AndroidRuntime(17387): Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.gallery3d.provider.GalleryProvider from ProcessRecord{42817d60 17387:com.tyczj.bowling/u0a10087} (pid=17387, uid=10087) requires com.google.android.gallery3d.permission.GALLERY_PROVIDER or com.google.android.gallery3d.permission.GALLERY_PROVIDER
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.os.Parcel.readException(Parcel.java:1425)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.os.Parcel.readException(Parcel.java:1379)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2530)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.app.ActivityThread.acquireProvider(ActivityThread.java:4460)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2002)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1101)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:708)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:614)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.content.ContentResolver.openInputStream(ContentResolver.java:449)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at com.tyczj.bowling.BowlersListFragment$LoadImage.doInBackground(BowlersListFragment.java:390)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at com.tyczj.bowling.BowlersListFragment$LoadImage.doInBackground(BowlersListFragment.java:1)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-25 20:31:52.508: E/AndroidRuntime(17387):    at   java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-25 20:31:52.508: E/AndroidRuntime(17387):    ... 4 more

所以我在 list 中输入了 com.google.android.gallery3d.permission.GALLERY_PROVIDER 但我仍然收到该错误,我还需要做什么?这是我第一次看到这个问题,在网上没有找到关于这个问题的信息。

如果这会成为问题,我可以让图库显示设备上的图像并排除 Picasa 图像吗?

就像我说的,我在 4.2 之前没有这个问题,或者可能与 最近的 google+ 更新有关?

编辑:

它只会在我退出应用程序并尝试重新启动后给我错误。因此,如果我在应用程序中并选择图像以显示第一次它可以正常工作,直到我退出。我将 Uri 存储在我的数据库中以在它启动时加载

这是我的 list 权限

<uses-permission android:name="com.tyczj.bowling.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER" />
<uses-permission android:name="android.permission.INTERNET" />

最佳答案

在我的应用程序中(也在 Android 4.2.x 中)实现 ACTION_SEND 和 ACTION_SEND_MULTIPLE 时遇到了类似的问题。如果我去画廊,选择一个或多个 Picasa 图片,然后选择“共享”,然后从选择器中选择我的应用程序,我的应用程序将抛出与上述相同的 SecurityException。任何尝试使用 ContentResolver 中的查询/加载方法都会抛出异常。

我也尝试添加 GALLERY_PROVIDER 权限,但没有帮助(另外,我查看了 Instagram 的 list ;它没有列出此权限)。

最后,一时兴起,我从我的实体中取出了 android:launchMode="singleTask",然后,瞧,一切正常。

我不知道为什么单任务应用会被禁止以这种方式共享。漏洞?特征?

关于android - 尝试在运行 4.2 的设备上访问 Picasa 图像时出现安全异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558177/

相关文章:

android - ACCESS_FINE_LOCATION 权限

Android M - 检查运行时权限 - 如何确定用户是否检查了 "Never ask again"?

android - 带有对象 ArrayAdapter 的自定义微调器无法获取资源

java - 如何将 ArrayList 数据追加到类对象中

android - 如何在 fragment 中的自定义 actionBar 中附加项目的 onClickListener

android - 检测到屏幕覆盖 | (Android 6.x) 联想、红米和三星设备

Android 6 权限访问互联网

android - 如何使用 SAF(存储访问框架)编辑 SD 卡中已经存在的文件?

android - Kotlin 泛型边界

javascript - phonegap 安卓相机 : crash when "correctOrientation" option set