小编Dav*_*ias的帖子

与FileProvider共享文件时使用grantUriPermission的SecurityException

我有两个申请.我正在尝试使用FileProvider将应用程序A中的文件共享到应用程序B. 应用程序A在应用程序B中的ContentProvider上调用insert方法以插入记录.插入的数据包括我想要从App A共享的文件的Uri.App B中的ContentProvider将尝试从App A读取共享文件.因为我没有使用Intent来共享文件,所以我是Context.grantUriPermission在App A中调用以允许读取(并且有时写入):

mContext.grantUriPermission(MyPackageName, contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
Run Code Online (Sandbox Code Playgroud)

但是,执行此行会给我(名称已更改以保护无辜者):

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...
Run Code Online (Sandbox Code Playgroud)

应用程序A在清单文件中具有以下内容:

<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>
Run Code Online (Sandbox Code Playgroud)

filepaths.xml有:

<paths>
    <files-path
        name="MyFolder"
        path="MyFolder/" />
</paths>
Run Code Online (Sandbox Code Playgroud)

App A和App B都有以下内容:

<uses-permission android:name="au.com.example.READ_CONTENT" />
<uses-permission android:name="au.com.example.WRITE_CONTENT" />
Run Code Online (Sandbox Code Playgroud)

我已经尝试在两个应用中定义权限.它们都使用相同的调试签名进行签名:

<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>
Run Code Online (Sandbox Code Playgroud)

文件最终的实际路径是: …

permissions android securityexception android-fileprovider

15
推荐指数
1
解决办法
3万
查看次数