2014-09-23 15 views
1

簡而言之,當我從意圖中選擇標識圖像並存儲URI時,我可以顯示/加載圖像。即使當我退出應用程序並重新啓動時,這也可以工作。 但是,當我重新啓動平板我有權限問題。Android內容提供商URI在重新啓動後不起作用

龍版本:

用戶可以選擇一個圖像

 if (Build.VERSION.SDK_INT < 19){ 
      intent = new Intent(); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      intent.setType("image/*"); 
     } else { 
      intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
      intent.addCategory(Intent.CATEGORY_OPENABLE); 
      intent.setType("image/*"); 
     } 

然後,我存儲的內容提供商URI到我的應用程序的數據庫,它看起來像這樣:

content://com.android.providers.media.documents/document/image%3A53 

圖像加載到圖像查看

myLogo.setImageURI(Uri.parse(f.getLogo_uri())); 

當我關閉應用程序並重新啓動時,標誌被加載 - 一切正常。 但是,當我重新啓動平板電腦,我得到這個消息

ImageView﹕ Unable to open content: content://com.android.providers.media.documents/document/image%3A53 
java.lang.SecurityException: Permission Denial: opening provider 
com.android.providers.media.MediaDocumentsProvider from ProcessRecord 
{x y:clazz.stuff} (pid=blah, uid=blah) requires android.permission.MANAGE_DOCUMENTS 
or android.permission.MANAGE_DOCUMENTS 

但我AndroidManifest.xml中被授予這個權限

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

任何幫助表示讚賞,謝謝!

p.s.我在android kitkat上4.4.4

回答

5

首先,UriContentProvider不需要耐用。它們用於即時消費,未來可能不一定在任意時間工作。

其次,沒有要求您將來有權使用有效的Uri,特別是Android 4.4上的存儲訪問框架(您的ACTION_OPEN_DOCUMENT路徑)。提供商可能會爲您提供更持久的權限,但您必須致電takePersistableUriPermission()。有關更多信息,請參見the Storage Access Framework documentation的「持久權限」部分。

您的具體錯誤感覺就像上面提到的第二個問題。

但我AndroidManifest.xml中被授予這個權限

除非你是通過固件的簽名密鑰簽署的,因爲這是一個signature允許,你不能保持MANAGE_DOCUMENTS許可。

+0

然後儲存Uri是否是好習慣?如果不是正確的持久方式?謝謝我將測試takePersistableUriPermission()。 – 2014-09-23 16:35:45

+1

@MichaelD:「然後儲存Uri是否好習慣?」 - 只要您不介意數據可能消失或您的訪問可能消失,歡迎您存儲'Uri'。 「如果不是正確的持久方式?」 - 我不能做什麼「正確」,因爲我不知道你在做什麼。如果您無法處理數據丟失或無法使用,請將數據複製到您自己的應用程序中。 – CommonsWare 2014-09-23 16:37:45

+0

即使我檢查了我是否有權限,我是否可以假設在重新啓動或媒體掃描之後,Uri將繼續指向相同的數據?或者圖像/視頻等id被重新分配,這意味着我可能最終在檢索存儲的Uri後加載錯誤的圖像? – samgak 2014-11-03 07:11:38