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に対してコンパイルしていますと権限を明確に直接として、私のマニフェストに記載しています私のマニフェストの子供。新しいランタイムアクセス許可では、ストレージにアクセスするときに実行時にアクセス許可を求める必要があることを理解しています。私はパーミッションのチェックを開始すると、この行を書くとき、私はIDEで問題を解決することはできません取得する:

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

は、シンボルManifest.permission.READ_EXTERNAL_STORAGEを解決することはできません。 Manifest.permission.C2D_MESSAGEを取得せずにエラーを解決できないのは、私のコードで明確に述べることができる唯一のManifest.permissionです。コード内の他のアクセス権にアクセスするためにコンパイルする必要があるものがありますか?

だけ明確にすること、これが私に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" /> 

私はちょうどそのパーマ私は画像のパスを取得することができます。これは、すべてのLollipopビルドに対してコンパイルするときに動作します.Marshmallowの新しい実行時アクセス権でSecurityExeptionを取得するだけです。任意およびすべてのヘルプは感謝事前に、高く評価され

+0

あなたはAndroid 6.0 Marshmallowでこの問題に直面していると思いますが、私も同じ問題に直面していますが、外部ストレージの読み取り権を要求できません。 – Herry

+0

私はあなたのコメントから答えを見つけました。 – Herry

+0

こんにちはAPIレベル23のためにこれを試してください http://stackoverflow.com/a/41221852/5488468 –

答えて

9

あなたは、android.Manifestのためにあなたは、他のJavaクラスと同じ方法をインポート文を追加する必要がシンボルManifest.permission.READ_EXTERNAL_STORAGE

を解決することはできません。

私は明らかに私のコードでの状態はそのような値(C2D_MESSAGEin android.Manifest.permissionはありませんエラーを解決することはできません

を得ることなくManifest.permission.C2D_MESSAGEであることができる唯一のManifest.permission。私はクラスがどこにあるか分からず、permissionの内部クラスとC2D_MESSAGEという名前のフィールドがあります。

+0

私はマニフェストを参照していたとき、私は今参照してください。許可は、自分のアプリケーションパッケージからそれを使用していたアンドロイドパッケージです。 ....私は 'android.Manifest.permission.READ_EXTERNAL_STORAGE'と 'Manifest.permission.READ_EXTERNAL_STORAGE'のように記述している限り、READ_EXTERNAL_STORAGEを使用できます。 –

関連する問題