5

我試圖從存儲讀取的圖像路徑和我一直在這裏得到拋出:SecurityException:不能要求READ_EXTERNAL_STORAGE許可

Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=31409, uid=10053 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 

我編譯反對API 23和有權限清楚我的清單描述爲直接我的Manifest的孩子。我也瞭解新運行時權限狀態,您需要在運行時請求權限以訪問存儲。當我寫這條線將開始檢查許可我得到一個無法解決的問題在IDE:

ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) 

不能解析符號Manifest.permission.READ_EXTERNAL_STORAGE。唯一的Manifest.permission,我可以在我的代碼清楚地聲明Manifest.permission.C2D_MESSAGE沒有得到一個無法解決錯誤。有什麼我需要編譯來訪問代碼中的其他權限?

只是要清楚這是代碼,是給我的拋出:SecurityException塊:

public List<String> getCameraImagesFull(Context context) { 
     Cursor cursor = null; 
     String[] star = {"*"}; 
     ArrayList<String> result = new ArrayList<>(); 
     cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC"); 
     if (cursor != null) { 
      if (cursor.moveToFirst()) { 
       do { 
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
        result.add(path); 
       } while (cursor.moveToNext()); 
      } 
      cursor.close(); 
     } 
     return result; 
    } 

這是拋出異常的行:

cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC"); 

而且這裏有所有的權限在我的清單中聲明:

<permission 
     android:name="com.example.gcm.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" /> 

我只是想知道如何去請求燙髮ission所以我可以得到圖像路徑。當我針對任何Lollipop版本進行編譯時,這一切都能正常工作,只需在Marshmallow即時獲得SecurityExeption的新運行時權限即可。任何和所有幫助表示讚賞,謝謝提前

+0

我認爲你在Android 6.0棉花糖面臨這個問題,我也面臨同樣的問題,但我無法請求讀取外部存儲的許可,你有什麼辦法嗎? – Herry

+0

好吧,我發現它從您的評論下面的答案。 – Herry

+0

你好,試試這個API級別23 http://stackoverflow.com/a/41221852/5488468 –

回答

9

不能解析符號Manifest.permission.READ_EXTERNAL_STORAGE

您需要添加一個import語句android.Manifest,你與任何其他Java類做同樣的方式。

,我可以在我的代碼載明的唯一Manifest.permission是Manifest.permission.C2D_MESSAGE沒有得到一個無法解決錯誤

有沒有這樣的值(C2D_MESSAGEin android.Manifest.permission。我甚至不知道Manifest課程在哪裏,permission內部課程的名稱爲C2D_MESSAGE

+0

謝謝你,我現在看到當我引用Manifest.permission正在使用它從我自己的應用程序包與android包。 ....我可以使用READ_EXTERNAL_STORAGE,只要我聲明它是'android.Manifest.permission.READ_EXTERNAL_STORAGE'vs'Manifest.permission.READ_EXTERNAL_STORAGE' –