Uri权限未授予提供者的路径

时间:2017-09-24 13:40:13

标签: java android permissions

我的应用中有提供商

<provider android:authorities="com.myapp.android.provider" android:exported="false" android:name="com.myapp.android.provider.FileSystemProvider">
    <grant-uri-permission android:pathPrefix="/"/>
</provider>

当我打电话给以下意图时:

Intent intent = new Intent();
intent.setClassName(getPackageName(), "com.myapp.android.CameraActivity");
intent.setData(Uri.parse("content://com.myapp.android.provider/"));
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
        | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
        | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
        | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);

我得到例外

  

引起:java.lang.SecurityException:Permission Denial:start   意图{dat = content://com.myapp.android.provider/ flg = 0xc3   cmp = com ........ / com .........(有额外的)}来自   ProcessRecord {44955bc0 9477:com ..... / u0a260}(pid = 9477,   uid = 10260)未从uid 10261导出

我做错了什么?我试图指定文件或不同目录的完整路径,但它从未起作用。

2 个答案:

答案 0 :(得分:0)

   <provider android:authorities="com.myapp.android.provider" 
android:exported="true"<----- change android:name="com.myapp.android.provider.FileSystemProvider">
        <grant-uri-permission android:pathPrefix="/"/>
    </provider>

答案 1 :(得分:0)

intent.setClassName(getPackageName(), "com.myapp.android.CameraActivity");

最有可能的是,这不是您应用中的实际代码行;你的真实代码是指定其他应用程序。无论如何,此组件不会导出,因此您无法从应用程序访问它。