2017-09-24 54 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

我想保留它不導出給任何人。只需授予特定路徑 –