5

Ich versuche Bildpfade aus dem Speicher zu lesen, und ich erhalte die Security hier anfordern:nicht READ_EXTERNAL_STORAGE Erlaubnis

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() 

Ich bin Kompilieren gegen api 23 und haben die Berechtigungen klar gesagt in meinem Manifest als direktes Kind meines Manifests. Ich verstehe auch, dass der neue Laufzeitberechtigungszustand Sie während der Laufzeit um Erlaubnis fragen müssen, wenn Sie auf den Speicher zugreifen möchten. Wenn ich diese Zeile schreiben, die die Prüfung für die Genehmigung beginnen bekommen würde ich ein in der IDE nicht lösen Problem:

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

nicht Symbol Manifest.permission.READ_EXTERNAL_STORAGE auflösen kann. Die einzige Manifest.permission, die ich in meinem Code eindeutig angeben kann, ist Manifest.permission.C2D_MESSAGE, ohne dass ein Fehler nicht behoben werden kann. Gibt es noch etwas, das ich kompilieren muss, um auf die anderen Berechtigungen im Code zugreifen zu können?

Nur um klar zu sein das der Code-Block ist, der mir die Security schenkt:

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; 
    } 

das ist die Linie, die die Ausnahme auslöst:

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

Und hier sind alle Berechtigungen in meinem Manifest angegeben:

<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" /> 

Ich frage mich nur, wie ich über die Anforderung dieser Dauerwelle gehen ission, damit ich die Bildpfade bekommen kann. Das alles funktioniert, wenn ich gegen jeden Lollipop-Build kompiliere, nur mit den neuen Laufzeitberechtigungen für Marshmallow, wenn ich die SecurityExeption erhalte. Jedwedes Hilfe ist willkommen, danke im voraus

+0

Ich denke, Sie sind mit diesem Problem in Android 6.0 Marshmallow konfrontiert, ich bin auch vor demselben Problem, aber ich bin nicht in der Lage, Leseberechtigung für externen Speicher anfordern, haben Sie einen Weg gefunden? – Herry

+0

Ok ich fand es von deinem Kommentar unter Antwort. Verwendung wurde, ist es aus meinem eigenen App-Paket gegen das Android-Paket – Herry

+0

Hallo Versuchen Sie, diese für die API-Stufe 23 http://stackoverflow.com/a/41221852/5488468 –

Antwort

9

nicht Symbol Manifest.permission.READ_EXTERNAL_STORAGE

Sie müssen hinzufügen, um eine Import-Anweisung für android.Manifest, auf die gleiche Weise tun mit einer anderen Java-Klasse lösen .

Die einzige Manifest.permission, dass ich klar in meinem Code angeben kann, ist Manifest.permission.C2D_MESSAGE ohne eine immer Fehler nicht beheben kann

Es gibt keinen Wert (C2D_MESSAGE) in android.Manifest.permission. Ich weiß nicht einmal, wo es eine Manifest Klasse gibt, mit einer permission inneren Klasse, mit einem Feld namens C2D_MESSAGE.

+0

danke, ich sehe jetzt, wenn ich Manifest.permission wurde referenzieren. .... ich kann READ_EXTERNAL_STORAGE verwenden, solange ich es als 'android.Manifest.permission.READ_EXTERNAL_STORAGE' vs 'Manifest.permission.READ_EXTERNAL_STORAGE' festlege –