Accesso alla memoria esterna nell'API Android 29
Sto cercando di ottenere alcuni strumenti di pulizia. Sempre più produttori hanno vietato il rooting dei dispositivi per "motivi di sicurezza", è vietato NON richiederne lo sblocco.
Dopo l'API 28, questo codice farà errore:
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result
File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null
Certo, posso usare questo:
android:requestLegacyExternalStorage="true"
Ma credo che in futuro verrà ucciso.
Quindi, un modo elegante per gestire SDCard?
Risposte
Su Android 10 Environment.getExternalStorageDirectory()e Environment.getExternalStoragePublicDirectory()restituirà percorsi di archiviazione ma i percorsi non sono leggibili o scrivibili.
Per Android 10 puoi continuare a utilizzare i percorsi forniti da Environment.getExternalStorageDirectory () e Environment.getExternalStoragePublicDirectory () se aggiungi
android:requestLegacyExternalStorage="true"al tag dell'applicazione nel file manifest. In fase di esecuzione, l'app può chiamareEnvironment.isExternalStorageLegacy()per verificare se la richiesta è stata eseguita.Un'altra possibilità (non nota) (solo per Android 10) è quella di aggiungere
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />al file manifest. L'utente deve accedere alle impostazioni avanzate dell'app e abilitare daAdvanced settings Install unknown apps | Allow from this source. La cosa bella è che l'utente può cambiare i diritti di accesso. Puoi renderlo più semplice per l'utente se implementi un intento perSettings.ACTION_APPLICATION_DETAILS_SETTINGScui può modificare le impostazioni. Una cosa divertente è che anche Environment.isExternalStorageLegacy () restituisce true.Compilando per Android 11 entrambe le opzioni non funzionano su un dispositivo Android 11. (Ma continuano a funzionare per i dispositivi Android 10). I percorsi di Environment.getExternalStorageDirectory () e Environment.getExternalStoragePublicDirectory () sono
usable again in read mode and very often in write mode too. E questo è fantastico in quanto si può semplicemente elencare i contenuti di directory come Download o Immagini o DCIM / Fotocamera utilizzando nuovamente la classe File. Ma l'aggiunta<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />al file manifest e l'implementazione di un intento perSettings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSIONdaranno alla tua app l'accesso in lettura / scrittura per tutti i file anche sulla scheda micro sd rimovibile. (Finalmente puoi rimuovere il divieto di Google di non essere in grado di leggere / scrivere la tua scheda micro sd sul tuo dispositivo Android utilizzando la tua app).Environment.isExternalStorageManager()può essere utilizzato per verificare se l'autorizzazione è attivata / disattivata. Finché non provi a caricare la tua app nel Play Store, stai bene.