ho osservato esattamente lo stesso problema, anche dopo l'aggiunta del codice di permessi di esecuzione richiesto con Android 6.0.
Nella mia attività ho il seguente codice:
int permissionCheck1 = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
int permissionCheck2 = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck1 != PackageManager.PERMISSION_GRANTED || permissionCheck2 != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_READWRITE_STORAGE);
}
e ricevo la richiamata previsto quando l'utente conferma la richiesta per i permessi di lettura/scrittura di stoccaggio.
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions,
int[] grantResults) {
if (requestCode == REQUEST_READWRITE_STORAGE) {
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
finishCreationStep();
}
}
}
Ho verificato nel debugger che sono state concesse entrambe le autorizzazioni di lettura e scrittura. Eppure la chiamata successivamente eseguita a leggere stoccaggio fallisce:
File[] possible_files = mrpDir.listFiles();
La chiamata a ListFiles() restituisce null. Se interrompo l'applicazione e vado in Impostazioni> App per la mia app, vedo che è stata concessa l'autorizzazione di archiviazione. Se termino anche l'app e la riavvii, le autorizzazioni sono lì, come previsto, e le chiamate listFiles() funzionano correttamente. In altre parole, la modifica delle autorizzazioni non ha effetto fino a quando l'app non viene terminata e riavviata. C'è un modo per far sì che l'app riconosca le autorizzazioni modificate senza dover interrompere l'utente e riavviarlo manualmente?
Come con il mittente di questo thread, sono in esecuzione con un emulatore API 23, poiché attualmente non ho accesso a un dispositivo Android 6. Quindi suppongo sia possibile che ci sia un problema con l'emulatore. Ma sembra improbabile.
Risolto! Grazie! – yushulx
Ho lo stesso problema. Autorizzazione richiesta dall'utente in runtime.but non può risolvere il problema. – krishna