繁体   English   中英

如何修复 android studio 中的权限错误

[英]how to fix an authority error in android studio

当我尝试拍照时运行我的应用程序时出现错误。

2019-10-30 07:55:18.411 578-578/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 578 java.lang.IllegalArgumentException: Couldn't find meta-具有 fssdfs 权限的提供商的数据

当我单击按钮在我的应用程序中拍照时,这会给我一个错误并使应用程序崩溃。 请帮忙!

我认为您错过了添加到 Manifest.XML 文件中的代码,所以试试这个,它可能会对您有所帮助。

<meta-data
android:name="android.support.FILE_PROVIDER_PATHS" <-- HERE!!!
android:resource="@xml/provider_paths" />

您面临的问题是因为您在清单中声明的内容提供者权限与您从提供者请求 URI 时使用的权限不同。

常见原因是库对自己的提供者权限进行了硬编码,并且提供者权限字符串普遍不匹配。

为了解决这些问题,同时满足提供者权限必须唯一的条件,您可以使用应用程序 id 作为提供者权限,或者将应用程序 id 变量与您的字符串连接为提供者权限。 解决方案详述如下:

在您的清单中,您可以将其用作您的提供者:

       <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

在您的 Java 代码中,您可以访问具有以下权限的提供程序:

Uri contentUri = FileProvider.getUriForFile(context, context.getPackageName(), file);

或者,如果您仍然希望为您的权限进行更多自定义,您也可以这样做:

   <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.my_custom_addition"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

然后您可以在代码中引用权限,如下所示:

Uri contentUri = FileProvider.getUriForFile(context, context.getPackageName()+".my_custom_addition", file);

使用第二种方法的缺点是您始终必须记住自定义权限的确切字符串。

我将推荐第一种方法,尽管当您的应用程序中有多个内容提供者时,后一种方法更可取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM