Wie ändert sich der Speicherzugriff auf Android 6?

Lesezeit: 8 Minuten

Benutzer-Avatar
Android-Entwickler

Hintergrund

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

  • API 3 – Sie erhalten vollen Zugriff, keine Berechtigung erforderlich
  • API 4-15 – Sie müssen WRITE_EXTERNAL_STORAGE verwenden und erhalten vollen Zugriff.
  • API 16-18 – wenn Sie nur lesen möchten, verwenden Sie READ_EXTERNAL_STORAGE
  • API 19-20 – Sie können nicht auf 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 zuzugreifen, müssen Sie den Benutzer um Erlaubnis fragen und die DocumentFile-API anstelle der File-API verwenden. Dies hat viele Fragen aufgeworfen, wie ich geschrieben habe hier, hier und hier.

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

Das Problem

Für API 23 gibt es mindestens 2 Dinge, die neu sind und sich auf den Speicher beziehen:

  • Annehmbare Speichergeräte” – Der Benutzer kann die SD-Karte optional als primären externen Speicher verwenden.
  • Im Rahmen des neuer Berechtigungsmechanismus (Berechtigungen zur Laufzeit anfordern), scheint es, dass die Speicherung 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

Da es kein Android 6-Gerät mit SD-Karte gibt und der Emulator selbst nicht wirklich die Fähigkeit hat, eine SD-Karte zu verwenden, ist es immer noch unmöglich zu wissen, was los ist.

Die Fragen

  1. Bekommt die SD-Karte den Zugriff über die File-API statt über DocumentFile?

  2. Wenn ich Zugriff auf alle externen Speicherpfade (einschließlich SD-Karte) haben möchte, bedeutet dies, dass ich diese Berechtigungen zweimal anfordern muss: eine für den primären externen Speicher und eine für die SD-Karte?

  3. Sind Dateien auf der SD-Karte vor der manuellen Erteilung der Berechtigung in irgendeiner Weise zugänglich?

  4. Angenommen, der Benutzer hat sich für die Verwendung von „Adoptable Storage Devices“ entschieden, was bedeutet dies für die verschiedenen Funktionen, die die Pfade der App-Dateien abrufen? Zum Beispiel: getFilesDir, getExternalFilesDir,… ? Würde sich dadurch die Reihenfolge von getExternalFilesDirs ändern?

  5. Was passiert mit den Dateien der App, wenn der Benutzer die App von/auf die SD-Karte verschiebt (unter Verwendung 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, im Pfad „/storage/extSdCard/Android/data/appPackageName“, und sie eine Datei „file2.txt“ (oder sogar den gleichen Namen) hat 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, wenn überhaupt, in einem einzigen Ordner zusammengeführt?

  6. Bedeutet das Verschieben der App auf die SD-Karte (unter Verwendung von „Adoptable Storage Devices“), dass kein interner Speicher verwendet wird?

  • „Da es kein Android 6-Gerät gibt, das eine SD-Karte hat, und weil der Emulator selbst nicht wirklich die Fähigkeit hat, eine SD-Karte zu verwenden, ist es immer noch unmöglich zu wissen, was los ist“ – zitiert die Dokumentation das Sie haben verlinkt: „Um diese Funktion in der Entwicklervorschau zu debuggen, können Sie die Übernahme eines USB-Laufwerks aktivieren, das über ein USB-On-The-Go-Kabel (OTG) mit einem Android-Gerät verbunden ist“. Funktionierte gut auf MNCv1.

    – CommonsWare

    20. August 2015 um 23:06 Uhr

  • “Was passiert mit den Dateien der App, wenn der Benutzer die App von/auf die SD-Karte verschiebt (unter Verwendung der “Adoptable Storage Devices”)?” – interner Speicher (z. B. getFilesDir()) werden in den angenommenen Speicher verschoben. Es gibt keine Änderung an Dateien im externen Speicher, es sei denn, die Dokumentation und meine Experimente haben etwas übersehen. “Was ist mit den Dateien der App auf der SD-Karte?” — der übernommene Speicher wird neu formatiert und in ein verschlüsseltes Volume umgewandelt; alles darauf wird im Rahmen des Adoptionsprozesses gelöscht.

    – CommonsWare

    20. August 2015 um 23:06 Uhr

  • Über den Emulator weiß ich das, aber es ist nicht wie eine echte SD-Karte, da es als primärer externer Speicher gilt. Sie können nur einen einzigen externen Speicher auf dem Emulator haben. Diese Situation ist heutzutage sehr sehr selten. Alle Geräte, die ich kenne, haben sowohl internen als auch externen Speicher. Keiner hat nur interne und SD-Karte, wie es beim Emulator der Fall ist. Tatsächlich können Sie nicht 0 MB für die SD-Karte festlegen, nur weil es sich um den primären externen Speicher handelt.

    – Android-Entwickler

    21. August 2015 um 11:51 Uhr

  • Bedeutet dies zu „Adoptable Storage Devices“, dass nichts mehr im internen Speicher gespeichert werden kann, wenn dies erledigt ist? Ich gehe auch davon aus, dass die App jetzt auf einer anderen Partition der SD-Karte gespeichert ist, oder? Eine, von der keine App lesen kann.

    – Android-Entwickler

    21. August 2015 um 11:54 Uhr

  • “bedeutet das, dass nichts mehr im internen Speicher gespeichert werden kann, wenn es fertig ist?” — für eine einzelne App, AFAIK, ja. Wie bei den alten “apps2SD”-Sachen aus der Android 2.x-Ära können Benutzer einige Apps im internen Speicher und einige auf Wechselspeichern haben. “Ich gehe auch davon aus, dass die App jetzt auf einer anderen Partition der SD-Karte gespeichert ist, oder?” — wie ich geschrieben habe, wird der übernommene Speicher neu formatiert und in ein verschlüsseltes Volume umgewandelt. Ich habe keine Details zu feinerer Sicherheit als das, obwohl ich davon ausgehen würde, dass es dem internen Speicher in Bezug auf Apps entspricht, die an die Sachen anderer Apps gelangen.

    – CommonsWare

    21. August 2015 um 12:21 Uhr

Benutzer-Avatar
Vikasdeep Singh

Lassen Sie mich antworten Annehmbare Speichergeräte verwandte Fragen:

  1. Angenommen, der Benutzer hat sich für die Verwendung von „Adoptable Storage Devices“ entschieden, was bedeutet dies für die verschiedenen Funktionen, die die Pfade der App-Dateien abrufen? Zum Beispiel: getFilesDir, getExternalFilesDir,… ? Würde sich dadurch die Reihenfolge von getExternalFilesDirs ändern?

Wenn der Benutzer die SD-Karte als „annehmbares Speichergerät“ (als internes Format formatieren) wählt, bedeutet dies jetzt, dass die SD-Karte nur als interner Speicher verfügbar ist, dh keine SD-Karte zum Speichern heruntergeladener Dateien verfügbar ist. Es wird keine Änderung der Reihenfolge in Pfaden geben, die von den verwandten Methoden zurückgegeben werden. Beispiel: getExternalFilesDir() listet nur den externen Speicherpfad auf, wenn der Benutzer seine SD-Karte als „Adoptable Storage Devices“ formatiert hat. Der SD-Kartenpfad ist nicht verfügbar.

  1. Was passiert mit den Dateien der App, wenn der Benutzer die App von/auf die SD-Karte verschiebt (unter Verwendung 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, im Pfad „/storage/extSdCard/Android/data/appPackageName“, und sie eine Datei „file2.txt“ (oder sogar den gleichen Namen) hat 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, wenn überhaupt, in einem einzigen Ordner zusammengeführt?

Wann immer der Benutzer seine SD-Karte als „Adoptable Storage Devices“ auswählt, muss der Benutzer seine SD-Karte als internen Speicher formatieren „Als intern formatieren“ Möglichkeit. Formatieren bedeutet, dass alle auf der SD-Karte gespeicherten Daten/Dateien gelöscht werden. In ähnlicher Weise muss der Benutzer, wenn er seine SD-Karte aus „Adoptable Storage Devices“ entfernen möchte, seine SD-Karte erneut als tragbaren Speicher formatieren „Als portabel formatieren“ Möglichkeit.

  1. Bedeutet das Verschieben der App auf die SD-Karte (unter Verwendung von „Adoptable Storage Devices“), dass kein interner Speicher verwendet wird?

Ja, der ursprüngliche interne Speicher wird nicht verwendet. Es wird nur der SD-Kartenspeicher verwendet, da die SD-Karte als „Adoptable Storage Devices“ ausgewählt wurde. Alle Daten/Cache werden auf der SD-Karte gespeichert

  • Ebenso, wenn ich eine SD-Karte als internen Speicher habe, aber mich entscheide, die App im echten internen Speicher zu installieren, könnte ich dann die SD-Karte zum Speichern von App-Daten verwenden? Und wenn ja, welche API sollte ich verwenden, da ich verstehe, dass getExternalFilesDir in diesem Fall keinen Pfad zurückgibt?

    – Nalitzis

    27. Oktober 2015 um 21:38 Uhr

Um Ihre Frage 5 zu beantworten: Unter Android 7 werden alle Dateien im Bereich “öffentliche Daten”, /storage/emulated/0/ (oder ein herstellerspezifischer Speicherort; es ist das Verzeichnis, das DCIM Downloadsusw.), werden entweder vollständig im internen Speicher oder vollständig auf der übernommenen SD-Karte gespeichert. Nach dem anfänglichen Formatieren einer übernommenen SD-Karte wird dem Benutzer die Möglichkeit geboten, „Daten zu migrieren“, wodurch alle verschoben werden /storage/emulated/0 auf die SD-Karte. Der Benutzer kann auch jederzeit zu gehen Einstellungen / Speicherwählen Sie den Speicherbereich aus, der derzeit nicht den öffentlichen Datenbereich enthält, und klicken Sie auf (drei vertikale Punkte) oben rechts, um ein Menü mit der Option „Daten migrieren“ aufzurufen.

Es scheint, dass es für einen Benutzer oder eine Anwendung keine Möglichkeit gibt, eine bestimmte öffentliche Datei auf die SD-Karte zu zwingen, wenn eine angenommene Karte verwendet wird; Alles oder Nichts. (Der private Speicher der App befindet sich im internen Speicher oder auf der SD-Karte, je nachdem, ob die App auf die SD-Karte verschoben wurde oder nicht; auch dort scheint es, dass die App immer nur das eine oder das andere verwendet, nicht beide .)

  • Was würde mit den Dateien passieren, die ich in #5 erwähnt habe? Es wurde gesagt, dass es formatiert wird. Ist es wahr? Außerdem hast du gesagt, es geht um alles oder nichts. Das bedeutet, dass alle Apps und ihre Daten auf die SD-Karte verschoben werden? Was bleibt jetzt noch für den internen Speicher übrig? Vielleicht nur die System-App und ihre Daten? Und was passiert, wenn der Benutzer die SD-Karte herauszieht?

    – Android-Entwickler

    10. September 2018 um 5:29 Uhr

  • Mir ist nicht ganz klar, was Sie fragen. Wenn Sie eine SD-Karte mit Dateien darauf formatieren, sind diese Dateien weg, ja. Wenn Sie einfach die alte Karte herausnehmen und durch eine neue ersetzen, befinden sich die Dateien immer noch auf der alten Karte, sind aber für Ihr Telefon nicht zugänglich. Oder haben Sie eine Möglichkeit gefunden, zwei SD-Karten in Ihr Gerät einzulegen?

    – cjs

    11. September 2018 um 2:26 Uhr

1061900cookie-checkWie ändert sich der Speicherzugriff auf Android 6?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy