首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ContentProvider 權限拒絕異常排查指南

     編輯:程式設計綜合問答

錯誤現象

調用自定義 ContentProvider 進行增刪改查均報錯:

java.lang.SecurityException: Permission Denial: opening provider 
com.dfby.sqlite.provider.PersonContentProvider from ProcessRecord... 
that is not exported from uid 10062

根本原因

AndroidManifest.xml 中 <provider> 標籤缺少 android:exported="true" 或缺少相應的 <permission> 聲明,導致跨進程訪問被系統阻擋。

修正步驟

  1. 在 <provider> 中添加 android:exported="true"(API 17+ 必須顯式聲明)。
  2. 若需權限控制,定義自定義權限並授予調用方:
    <permission android:name="com.dfby.PROVIDER_PERMISSION" 
        android:protectionLevel="normal" />
    <provider 
        android:name=".provider.PersonContentProvider"
        android:authorities="com.dfby.sqlite.provider"
        android:exported="true"
        android:readPermission="com.dfby.PROVIDER_PERMISSION"
        android:writePermission="com.dfby.PROVIDER_PERMISSION" />
    
  3. 調用方 AndroidManifest.xml 添加 <uses-permission android:name="com.dfby.PROVIDER_PERMISSION" />。

驗證方法

  • 使用 adb shell dumpsys package <pkg> 檢查 Provider 權限設置。
  • 測試同一應用內訪問(不跨進程)是否正常,隔離是否為導出問題。

總結

ContentProvider 跨進程訪問必須在 Manifest 中正確配置 exported 與權限屬性,否則系統會拋出 SecurityException。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved