Wie ändert sich der Speicherzugriff auf Android 6?

Hintergrun

Android hatte viele Änderungen in Bezug auf den Umgang mit der SD-Karte und dem Speicher im Allgemeinen:

API 3 - Sie erhalten alle Zugriffsrechte, keine Berechtigung erforderlichAPI 4-15 - Sie müssen WRITE_EXTERNAL_STORAGE verwenden und erhalten alle Zugriffsrechte.API 16-18 - Wenn Sie nur lesen möchten, verwenden Sie READ_EXTERNAL_STORAGEAPI 19-20 - Sie können nicht auf den sekundären externen Speicher (SD-Karte) lesen oder schreiben, es sei denn, Ihre App ist eine System-App oder Sie haben root.API 21-22 - Um auf die SD-Karte zugreifen zu können, müssen Sie den Benutzer um Erlaubnis bitten und die DocumentFile-API anstelle der Datei-API verwenden. Dies warf eine Menge Fragen auf, wie ich über @ geschrieben haHie, Hie undHie.

Start mit API 23 (Android 6) scheinen sich die Dinge noch einmal zu ändern ...

Das Proble

Für API 23 gibt es mindestens zwei neue und speicherbezogene Funktionen:

"Adoptable Storage Devices "- Der Benutzer kann die SD-Karte optional als primären externen Speicher definieren.Im Rahmen desneuer Berechtigungsmechanismus (das zur Laufzeit Berechtigungen anfordert) scheint, dass das Speichern auch eine Berechtigung ist, die der Benutzer bestätigen muss. Dies gilt sowohl für READ_EXTERNAL_STORAGE als auch für WRITE_EXTERNAL_STORAGE

Seit es kein Android 6-Gerät mit SD-Karte gibt, und da der Emulator selbst keine SD-Karte verwenden kann, ist es immer noch unmöglich zu wissen, was los ist.

Die Frage

rhält die SD-Karte den Zugriff über die File-API anstelle von DocumentFil

Wenn ich auf alle externen Speicherpfade (einschließlich der SD-Karte) zugreifen möchte, muss ich diese Berechtigungen dann zweimal anfordern: eine für den primären externen Speicher und eine für die SD-Karte?

ind Dateien auf der SD-Karte vor der manuellen Erteilung der Erlaubnis in irgendeiner Weise zugänglic

Angenommen, der Benutzer hat sich für die Verwendung von "Adoptable Storage Devices" entschieden. Was bedeutet dies für die verschiedenen Funktionen, mit denen die Pfade der App-Dateien abgerufen werden? Zum Beispiel: getFilesDir, getExternalFilesDir, ...? Würde sich die Reihenfolge von getExternalFilesDirs dadurch ändern?

Was passiert mit den Dateien der App, wenn der Benutzer die App von / auf die SD-Karte verschiebt (mithilfe der "Adoptable Storage Devices")? Was ist mit den Dateien der App auf der SD-Karte? Würden sie bleiben? Oder würden sie irgendwohin ziehen?

Wenn die App beispielsweise "file1.txt" auf der SD-Karte hat, auf dem Pfad "/ storage / extSdCard / Android / data / appPackageName", und sie hat eine Datei "file2.txt" (oder sogar den gleichen Namen) ) auf dem primären externen Speicher im Pfad "/ storage / emulated / 0 / Android / data / appPackageName". Was würde nach dem Wechsel mit diesen Dateien passieren? Wie würden sie in einem einzigen Ordner zusammengeführt, wenn überhaupt?

Wenn die App auf die SD-Karte verschoben wird (mithilfe von "Adoptable Storage Devices"), bedeutet dies, dass kein interner Speicher verwendet wird?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage