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
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
Ok ich fand es von deinem Kommentar unter Antwort. Verwendung wurde, ist es aus meinem eigenen App-Paket gegen das Android-Paket – Herry
Hallo Versuchen Sie, diese für die API-Stufe 23 http://stackoverflow.com/a/41221852/5488468 –