当前位置: 首页 > 知识库问答 >
问题:

java.lang.SecurityException:权限拒绝:正在打开提供程序

司马自明
2023-03-14

我开始图像拾取器的意图使用:

final Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, PICK_IMAGE);

onactivityresult()中,我获取所有选中图像的URI,启动在后台运行的作业并上传这些图像(https://github.com/yigit/android-priority-jobqueue)。但如果按下“后退”按钮并退出活动,则任何未启动的作业在运行并抛出异常时都无法访问选定的映像:

java.lang.SecurityException:拒绝权限:从ProcessRecord{...}打开提供程序com.google.android.apps.photos.ContentProvider.MediaContentProvider(PID=2407,uid=10117)未从uid 10123导出

其发生的原因是,一旦活动完成,权限就会被撤销。根据https://developer.android.com/guide/topics/providers/content-provider-basics.html文档:

这些是特定内容URI的权限,持续到接收它们的活动完成为止。

我的问题是,有没有办法解决这个问题?比如在应用程序级别获得权限之类的?

解决这个问题的候补是什么?一个快速的解决方案似乎是制作一个拷贝所有挑选的图像,然后上传他们,但这似乎是最后的手段。

共有1个答案

茅曾琪
2023-03-14

注意:试图从uri获取文件名是错误的。别这么做!内容提供商还可以共享任何文件中不存在的任意数据,或者文件名可能具有误导性。例如。内容://downloads/some_secret_data指向的文件可能不在downloads文件夹中。

所以最好的做法是立即从内容提供商读取/复制数据,然后使用这些数据来做任何你想做的事情。在我的情况下,我是上传的。

这就是我所做的,对我来说很好。如果有人有更好的解决方案,请分享。我有android.permission.read_external_storage所以当用户选择图像时,我使用了具体的文件路径,而不是OnActivityResult()中返回的URI。为了检索文件路径,我使用了这个方便的类https://stackoverflow.com/a/20559175/826606,瞧!

 类似资料:
  • java.lang.SecurityException:权限拒绝:从ProcessRecord{932688f 12849:mobi.hubbler.app/U0A158}(PID=12849,uid=10158)打开提供程序com.miui.gallery.provider.GalleryOpenProvider,而该提供程序不是从uid 10034导出的 试图从URI获取位图。这个问题只发生在

  • 我遇到了问题,我尝试在我的comsumer应用程序中实现内容提供程序: 这是我从App A(提供商)获得的Android清单: 这是我从App B(消费者)获得的Android清单: 应用程序A得我得提供商: process:com.erlanggakmoekasan.favoritemovies,pid:27146 java.lang.runtimeException:无法启动活动Compone

  • 我已经创建了一个自定义内容提供者,它将被更多的应用程序访问。我已经在我的提供者AndroidManifest中包含了权限标记。xml文件,在第二个应用程序中,我包含了uses-permissions标记,但没有成功。Logcat向我展示: 我也搜索过类似的问题,但似乎一切都是正确的。有什么想法吗?谢谢 这是我的提供者AndroidManifest。xml文件: 这是我的第二个应用程序Android

  • 并且我在App2清单中添加了权限: 但我得到了这个错误: java.lang.SecurityException:拒绝权限:从ProcessRecord{46a1928 24678:com.x.x.myApplication11/U0a165}(PID=24678,UID=10165)打开提供程序com.x.x.adminapp.read_database或com.x.x.adminapp.wri

  • 我在尝试在Android emulator中执行应用程序升级时遇到了一些问题。该场景的流程来自一个活动,我将执行打开片段A的AsyncTask A,然后在AsyncTask A中,我将检查版本升级是否可用。 如果可用并且用户从片段A中选择了“OK”,我将转到AsyncTask B打开片段B,它向用户显示一条消息,说明正在进行升级。在AsyncTask B doInbackground()中,我将执

  • 我有两个app:app1和app2。 App2具有: paths.xml: App2在其活动中从App1接收获取映像URI的请求。确定URI后,App2活动执行以下操作: 从App2接收回结果后,App1执行以下操作: 在App1中,从App2返回时,我得到以下异常: java.lang.SecurityException:权限拒绝:从ProcessRecord{52a99eb0 3493:com