我有两个应用程序。我试图使用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