Zugriff auf externen Speicher in der Android-API 29
Ich versuche, einige Bereinigungswerkzeuge zu erreichen. Immer mehr Hersteller haben das Rooten von Geräten aus "Sicherheitsgründen" verboten. Es ist verboten, KEINE Entsperrung anzufordern.
Nach API 28 macht dieser Code einen Fehler:
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
Klar, ich kann das benutzen:
android:requestLegacyExternalStorage="true"
Aber ich glaube, dass das in Zukunft getötet wird.
Gibt es eine elegante Möglichkeit, SDCard zu verwalten?
Antworten
Am 10. Android Environment.getExternalStorageDirectory()und Environment.getExternalStoragePublicDirectory()kehren Speicherpfade aber Pfade nicht lesbar sind oder beschreibbar.
Für Android 10 können Sie weiterhin die von Environment.getExternalStorageDirectory () und Environment.getExternalStoragePublicDirectory () bereitgestellten Pfade verwenden, wenn Sie
android:requestLegacyExternalStorage="true"dem Anwendungstag in der Manifestdatei hinzufügen . Zur Laufzeit kann Ihre App anrufenEnvironment.isExternalStorageLegacy(), um zu überprüfen, ob die Anforderung ausgeführt wurde.Eine andere (nicht bekannte) Möglichkeit (nur für Android 10) ist das Hinzufügen
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />zur Manifestdatei. Der Benutzer muss zu den erweiterten Einstellungen der App gehen und von aktivierenAdvanced settings Install unknown apps | Allow from this source. Das Schöne daran ist, dass der Benutzer die Zugriffsrechte wechseln kann. Sie können es dem Benutzer erleichtern, wenn Sie eine Absicht implementieren,Settings.ACTION_APPLICATION_DETAILS_SETTINGSin der er die Einstellungen ändern kann. Eine lustige Sache ist, dass Environment.isExternalStorageLegacy () dann auch true zurückgibt.Beim Kompilieren für Android 11 funktionieren beide Optionen auf einem Android 11-Gerät nicht. (Aber sie funktionieren weiterhin für Android 10-Geräte). Die Pfade von Environment.getExternalStorageDirectory () und Environment.getExternalStoragePublicDirectory () sind
usable again in read mode and very often in write mode too. Und das ist großartig, da man einfach den Inhalt von Verzeichnissen wie Download oder Bilder oder DCIM / Kamera mit der File-Klasse erneut auflisten kann. Durch Hinzufügen<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />zu Manifest-Dateien und Implementieren einer Absicht fürSettings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSIONerhält Ihre App Lese- / Schreibzugriff auf alle Dateien, auch auf austauschbaren Micro-SD-Karten. (Schließlich können Sie das Google-Verbot aufheben, wenn Sie Ihre eigene Micro-SD-Karte nicht mit Ihrer eigenen App auf Ihrem eigenen Android-Gerät lesen / schreiben können.)Environment.isExternalStorageManager()kann verwendet werden, um zu überprüfen, ob die Berechtigung ein- oder ausgeschaltet ist. Solange Sie nicht versuchen, Ihre App in den Play Store hochzuladen, geht es Ihnen gut.