1. 程式人生 > >Android使用ContentProvider報異常(java.lang.SecurityException: Permission Denial: opening provider)

Android使用ContentProvider報異常(java.lang.SecurityException: Permission Denial: opening provider)

android使用ContentProvider直接報錯,檢視錯誤資訊提示:
java.lang.SecurityException: Permission Denial: opening provider
首先確認的是程式碼沒有問題,這就百思不得其解了,幾經周折,終於找到原因。

原因:

在manifest裡provider節點的exported屬性沒有設定,應該將熟悉設定為true

exporeted介紹

android:exported 是Android中的四大元件 Activity,Service,Provider,Receiver 四大元件中都會有的一個屬性。
作用:是否支援其它應用呼叫當前元件。預設值:如果包含有intent-filter 預設值為true; 沒有intent-filter預設值為false

如在provider中:
(1)當前內容提供者是否會被其它應用使用: true: 當前提供者可以被其它應用使用。任何應用可以使用Provider通過URI 來獲得它,也可以通過相應的許可權來使用Provider。
(2)false:當前提供者不能被其它應用使用。設定Android:exported=“false”來限制其它應用獲得你應用的Provider。只有擁有同樣的user ID 的應用可以獲得當前應用的Provider。
(3)當Android sdk 的最小版本為16或者更低時他的預設值是true。如果是17和以上的版本預設值是false。
(4)可以通過Android:exported=“fasle” 和 permission來限制當前應用Provider是否會被其它應用獲取。