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

JAVAlang.SecurityException:权限拒绝:打开提供程序com.google.Android应用程序。照片。所容纳之物谷歌图片提供商

辛成周
2023-03-14

突然间,我开始从运行android 4.3及更高版本的设备中获得以下异常

java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.content.GooglePhotosImageProvider from ProcessRecord{454ca9d0 5914:com.propertymanager/u0a10231} (pid=5914, uid=10231) requires com.google.android.apps.photos.permission.GOOGLE_PHOTOS or com.google.android.apps.photos.permission.GOOGLE_PHOTOS
        at android.os.Parcel.readException(Parcel.java:1431)
        at android.os.Parcel.readException(Parcel.java:1385)
        at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2896)
        at android.app.ActivityThread.acquireProvider(ActivityThread.java:4755)
        at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2480)
        at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1152)
        at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:759)
        at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:665)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:500)
        at com.myapp.xxxx.determineCorrectScale(SourceFile:148)

我的导致它的代码是

    public static int determineCorrectScale(Context con, Uri imagUri) {
        int scale = 1;
        InputStream imageStream = null;

                imageStream = con.getContentResolver().openInputStream(imagUri);
.
.
.
    }

有什么帮助吗??

编辑:这是我让用户在调用上述方法之前选择图片的方式

Intent choosePictureIntent = new Intent(Intent.ACTION_PICK, Images.Media.INTERNAL_CONTENT_URI);
tartActivityForResult(choosePictureIntent, REQUEST_CHOOSE_IMAGE);

这是OnActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case REQUEST_CHOOSE_IMAGE:

            Uri selectedImage = intent.getData();

            try {

                int scale = CommonFunc.determineCorrectScale(this, selectedImage);

共有2个答案

叶阳
2023-03-14

您需要将此权限添加到清单中:

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

希望这对你有用。请给我一个反馈

韶兴德
2023-03-14

虽然添加权限对这个特定的内容提供商有效,但如果您的数据是由其他内容提供商提供的,它将不起作用(在Android上,除非您明确访问该内容提供商,否则无法保证您将由特定的内容提供商获取数据)。

这个问题的“最终”解决方案可以在这里找到:

正在使用临时权限获取访问权限

即使您没有适当的访问权限,您也可以通过向具有权限的应用程序发送意图并返回包含“URI”权限的结果意图来访问内容提供程序中的数据。这些是特定内容URI的权限,持续到接收它们的活动完成。

http://developer.android.com/guide/topics/providers/content-provider-basics.html

从4.3版开始,Android会检查接收的Active是否仍在运行,如果没有,则会抛出SecurityException。确定的正确规模是一个静态方法,所以我假设它至少有时会在活动生命周期之外调用。为了一劳永逸地解决这个问题,您需要在活动运行时从内容提供商那里检索数据。我不知道您的应用程序的要求,但如果不涉及繁重的工作(例如从内容提供商复制图像),那么只需在用户界面线程上执行即可。如果需要繁重的工作,请使用活动启动的AsyncTask,但您必须确保在检索数据之前活动不会完成(这可能很棘手)。

我之所以添加这个答案,并不是因为我认为这是正确的答案,而是因为其他开发人员可能不知道4.3/4.4中引入的这个更改,并且可能会遇到与其他内容提供商相同的问题。

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

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

  • 并且我在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

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

  • 我开始图像拾取器的意图使用: 在中,我获取所有选中图像的URI,启动在后台运行的作业并上传这些图像(https://github.com/yigit/android-priority-jobqueue)。但如果按下“后退”按钮并退出活动,则任何未启动的作业在运行并抛出异常时都无法访问选定的映像: java.lang.SecurityException:拒绝权限:从ProcessRecord{...

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