我有兩個應用程序。我試圖使用FileProvider將文件從應用程序A共享到應用程序B.應用程序A在應用程序B中的ContentProvider上調用insert方法插入記錄。插入的數據包括Uri到我想要從App A共享的文件.App B中的ContentProvider然後嘗試從App A讀取共享文件。 因爲我沒有使用Intent來共享文件, M在應用主叫Context.grantUriPermission
允許讀取(有時寫):與FileProvider共享文件時發生的帶有grantUriPermission的SecurityException
mContext.grantUriPermission(MyPackageName, contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
但是,在執行此行給我(名稱變更爲保護無辜者):
java.lang.SecurityException: Uid 10066 does not have permission to uri content://au.com.example.AppA.fileprovider/MyFolder/MyFileName
at android.os.Parcel.readException(Parcel.java:1322)
at android.os.Parcel.readException(Parcel.java:1276)
at android.app.ActivityManagerProxy.grantUriPermission(ActivityManagerNative.java:2374)
at android.app.ContextImpl.grantUriPermission(ContextImpl.java:1371)
at android.content.ContextWrapper.grantUriPermission(ContextWrapper.java:400)
at etc...
應用程序A有Manifest文件中的以下內容:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="au.com.example.AppA.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
android:readPermission="au.com.example.READ_CONTENT"
android:writePermission="au.com.example.WRITE_CONTENT" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
filepaths.xml有:
<paths>
<files-path
name="MyFolder"
path="MyFolder/" />
</paths>
兩個應用程序A和應用B有以下幾點:
<uses-permission android:name="au.com.example.READ_CONTENT" />
<uses-permission android:name="au.com.example.WRITE_CONTENT" />
我試圖定義在這兩個應用程序的權限。它們都具有相同的調試簽名簽名:
<permission
android:name="au.com.example.READ_CONTENT"
android:permissionGroup="MyGroup"
android:protectionLevel="signature" >
</permission>
<permission
android:name="au.com.example.WRITE_CONTENT"
android:permissionGroup="MyGroup"
android:protectionLevel="signature" >
</permission>
在文件中最終的實際路徑是:
/data/data/au.com.example.AppA/files/MyFolder
在這一點上我很爲難。我不知道爲什麼我無法授予我在同一個應用程序中創建的文件的權限。所以我的問題是:爲什麼我得到這個異常,我怎樣才能成功授予應用程序B的權限?
我也有這個問題,並從清單中刪除讀取權限,但仍然得到'由java.lang.SecurityException:權限拒絕:打開提供程序android.support.v4.content.FileProvider ProcessRecord {40b7b968 7764: com.google.android.gm/10018}(pid = 7764,uid = 10018)需要null或null – StuStirling
@ DiscoS2我見過同樣的事情。我發現卸載並重新安裝該應用程序修復了它。我沒有檢查過,但我懷疑是否有某種緩存清單正在進行。 – DavidsAlias
如果您沒有使用Signature級別的權限,您的應用程序是否暴露在外部威脅之下才能讀取任何具有正確Uri的文件? – Toochka