` / storage / emulierten / Erbe /` ` vs / storage / emulierten / 0 / ` ` vs Daten / data / myApp '

? Elad Benda @ | Original: StackOverFlow
---

Ich möchte in meiner Anwendung ein imagefile speichern

Ich möchte " Google+ Cropper App ", es zu benutzen .

Aber die später öffnet sich ein weiteres Bild .

Ich denke, es ist Berechtigungsproblem .

In meinem Code ich sparen hier:

Ist das externe Speicher ? Environment.getExternalStorageDirectory().getAbsolutePath(), Die zurückgibt: /storage/emulated/0/myApp/file1.tmp

mit adb shell ist zu sehen die Datei tatsächlich in gespeichert : /storage/emulated/legacy/myApp/file1.tmp

Deshalb ist der Unterschied?

sollte ich diesen Ort verwenden Sie stattdessen ? Ist das externe Speicher ?

getAppContext().getFilesDir().getParent(), Die zurück : ` Daten / data / myApp '

---

Top 5 Antwort

1Squonk @

Historisch der Unterschied zwischen internen und externen Speicher wie folgt ...

Intern: Die interne RAM einem Android-Gerät verwendet werden, um die private Lagerhaltung für jede App zuweisen. Der zugewiesene Speicher ist geschützt, um den Zugriff von einer anderen App zu verhindern (außer verwurzelt Geräte).

Extern: In vielen Fällen ist eine SD-Karte ohne Sicherheitseinschränkungen, dh alle apps können alle Bereiche der "externen" Speicher zugreifen .

Wenn neue Versionen von Android haben kommen und neue Geräte haben immer mehr interne RAM wird der Unterschied zwischen internen und externen verschwimmen . Zum Beispiel mein Nexus 7 nicht über ein SD-Kartenslot .

Im Falle von Geräten ohne echte externe Speicher, ist es immer noch notwendig für Android, eine emulierte externen Speicher, um mit älteren Anwendungen kompatibel zu bleiben ist. Mit anderen Worten: der RAM physikalisch internen ( nicht abnehmbar ), aber ein Teil von ihr ist partitioniert und die Android- Dateisystem- APIs zu behandeln, dass die Partition als "extern" und gelesen werden .

Wie für die Pfade, die Sie sehen, für externe Speicher wie ...

/storage/emulated/0/myApp/file1.tmp
/storage/emulated/legacy/myApp/file1.tmp

... einen oder anderen dieser (möglicherweise beide) eine Weiterleitung oder "virtuellen" Pfad zu dem gleichen Teil des emulierten externe Verzeichnis und eine Datei .

Aus diesem Grund ist es wichtig, immer die richtigen API-Aufruf, um den Zugriff auf Dateien und Verzeichnisse nicht unter der Annahme einer hart codiert Pfad, wie er wohl von Gerät zu Gerät variieren bekommen .

Wenn Sie Environment.getExternalStorageDirectory(), können Sie sicher sein, dass jede andere App, die das gleiche tut, in der Lage, den Zugriff auf alle Dateien, die Sie es schaffen zu bekommen.

Wenn Sie getFilesDir(), dann sind Sie den Zugriff auf das Stammverzeichnis des internen Speicher privat, um Ihre Anwendung und zugänglich zugeteilt nur, um Ihre Anwendung (auch wenn, wie ich bereits erwähnt ein verwurzelt Telefon können private / internen Speicher zugreifen ) .