2017-09-24 52 views
0

我有一个供应商在我的应用程序乌里不被许可给供应商的路径

<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:权限拒绝:启动 意图{dat = content://com.myapp.android.provider/ flg = 0xc3 cmp = com ......../com .........(has extras)} from ProcessRecord {44955bc0 9477:com ...../u0a260}(pid = 9477, uid = 10260)未从uid导出10261

我做错了什么?我试图指定一个文件或不同目录的完整路径,但它从来没有工作。

回答

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

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

+0

但是为什么?我授予访问 –

+0

Android文档的说法:'如果内容提供者的grantUriPermissions属性为“true”,则可以为提供者的权限下的任何数据授予权限。但是,如果该属性为“false”,则只能将权限授予由此元素指定的数据子集。提供者可以包含任意数量的元素。每个人只能指定一个路径(只有三种可能的属性之一)。# –

+0

@SteveWarner:您授予访问“Uri”的权限。该活动位于其他人的应用中,并且该活动未导出。 – CommonsWare

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> 
+0

我想保留它不导出给任何人。只需授予特定路径 –