Sto cercando di leggere percorsi delle immagini dalla memoria e mi continuo a ricevere il SecurityException qui:non può richiedere l'autorizzazione 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()
sto compilazione contro api 23 e disporre delle autorizzazioni chiaramente affermato nel mio manifesto come diretta figlio del mio Manifesto. Capisco anche che i nuovi permessi di runtime affermano che devi chiedere l'autorizzazione durante il runtime quando vuoi accedere allo storage. Quando scrivo questa linea che avrebbe cominciato il controllo per l'autorizzazione ho un problema non può risolvere nell'IDE:
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
non permette di risolvere il simbolo Manifest.permission.READ_EXTERNAL_STORAGE. L'unica Manifest.permission che posso chiaramente indicare nel mio codice è Manifest.permission.C2D_MESSAGE senza ottenere un errore di risoluzione del problema. C'è qualcos'altro che ho bisogno di compilare per avere accesso agli altri permessi nel codice?
Giusto per essere chiari questo è il blocco di codice che mi sta dando la 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;
}
questa è la linea che genera l'eccezione:
cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC");
e qui ci sono tutte le autorizzazioni dichiarato nel mio manifest:
<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" />
mi sto solo chiedendo come vado a richiedere quella perm ission in modo da poter ottenere i percorsi dell'immagine. Funziona tutto quando eseguo la compilazione di qualsiasi build di Lollipop, solo con le nuove autorizzazioni di runtime su Marshmallow per ottenere SecurityExeption. Qualsiasi aiuto è apprezzato, grazie in anticipo
Penso che tu stia affrontando questo problema in Android 6.0 Marshmallow, sto anche affrontando lo stesso problema ma non sono in grado di richiedere il permesso di lettura per l'archiviazione esterna, hai trovato qualche modo? – Herry
Ok l'ho trovato dal tuo commento qui sotto rispondi. – Herry
Ciao Prova questo per API Livello 23 http://stackoverflow.com/a/41221852/5488468 –