Gibt es einen einfachen API-Aufruf, der mir sagt, ob eine App, die unter Android 10 oder höher ausgeführt wird, den Scoped Storage-Zugriff verwenden muss, dh wenn der normale Dateizugriff, auch bekannt als "Legacy External Storage", deaktiviert ist? Beachten Sie, dass selbst wenn die App in AndroidManifest.xml, Abschnitt deklariert:
android:requestLegacyExternalStorage="true"
Der Dateizugriff kann aufgrund zukünftiger Änderungen der Google-Richtlinien weiterhin verweigert werden. Das Testen dieses Werts ist daher nutzlos. Die einzige Möglichkeit, die ich gefunden habe, besteht darin, zu testen, ob das Stammverzeichnis des externen Speichers lesbar ist. Dazu muss die App jedoch zuerst die Speicherberechtigung anfordern, die für alles andere unbrauchbar ist, wenn der Legacy-Speicher deaktiviert ist.
public static boolean mustUseScopedStorage() {
// Impractical must first ask for useless Storage permission...
File exSD = Environment.getExternalStorageDirectory();
return !exSD.canRead(); // this test works only if Storage permission was granted.
}
Ich glaube, ich habe einmal eine neue API gesehen, um dies zu erkennen, kann diesen Artikel aber nicht mehr finden ...
quelle
an app running on Android 10 or later must use Scoped Storage access
? Können Sie erklären, was Sie damit meinen? Welche Funktionen haben Sie im Sinn? Ich weiß, dass zum Beispiel Storage Volumes und Storage Manager, die für N gebracht wurden, für Q bereits veraltet sind.Antworten:
Sie können diese beiden Methoden verwenden von
android.os.Environment
:isExternalStorageLegacy(File path)
isExternalStorageLegacy()
Wenn Sie feststellen, dass Sie Zugriff auf Legacy-Speicher haben, ist es meiner Meinung nach besser, Daten einfach in einen Speicher mit Gültigkeitsbereich zu migrieren und stattdessen zu verwenden, da Legacy-Speicher möglicherweise ohne Vorwarnung nicht mehr funktioniert.
quelle