簡體   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