在我的应用程序中,我让用户从图库中选择图像,并且在 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/