2013-05-06 4 views
7

In PhoneGap, verwende ichWohin zeigt LocalFileSystem.PERSISTENT?

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail); 

das Dateisystem zuzugreifen.
In meinem ASUS-Tablet hat es keine external sdcard (ich entferne kein entfernbares Gerät), so denke ich, das Dateisystem Root verweist auf die internal sdcard. In meinem HTC Desire HD wurden die Daten jedoch in die external sdcard geschrieben. (Da sich die Daten gerade auf der microSD-Karte befinden.)
Also, was ist die Wahrheit? Ich kann keine Hinweise im W3C Dokument sehen, vielleicht vermisse ich etwas ...

PS: Beide Android-Version sind ICS (Ice Cream Sandwich).

Antwort

15

Die FileAPI von PhoneGap ist zwar eine HTML5-Spezifikation, ist jedoch eine benutzerdefinierte Implementierung des W3C-Dokuments. You can find the docs specific to their API here. Während es meistens gleich verwendet werden kann, gibt es einige subtile Unterschiede zwischen der Implementierung im Web und pro Gerät. Der Speicherort des Speichers ist einer von diesen.

Um herauszufinden, wie PhoneGap persistenten Speicher verarbeitet, musste ich in den Cordova-Quellcode eintauchen. This file here contains the methods used by the PhoneGap FileAPI. Der entsprechende Codeblock beginnt bei Zeile 871. Im Grunde ruft die API einen Aufruf an Environment.getExternalStorageState(). Wenn Environment.MEDIA_MOUNTED zurückgegeben wird, was bedeutet, dass entweder removable or non-removable SD card für den Speicher vorhanden ist, ist das von der API zurückgegebene Dateisystem das Stammverzeichnis des bereitgestellten Speichers unter Verwendung von Environment.getExternalStorageDirectory(). Dies erklärt den Unterschied in dem Verhalten, das Sie zwischen Geräten mit internen und externen SD-Karten gesehen haben, die beide vom System als externer Speicher betrachtet werden. Wenn Sie auf ein Gerät ohne externen Speicher stoßen, zB !Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED), ist der Stamm des zurückgegebenen Dateisystems "data/data/packageName" in internal storage, ähnlich wie der Aufruf Context.getFilesDir(), der normalerweise etwas wie "data/data/packageName/files" zurückgibt. .

+1

Sie sind unglaublich gut! Aber ich habe eine Frage: tut Zeile 868 'fs.put (" root ", getEntry ("/Daten/Daten/"+ cordova.getActivity(). GetPackageName() +"/cache/")); bedeuten das System Erstellen Sie ein Verzeichnis namens/data/data/+ ~ +/cache /? Es schafft einen Platz für den Benutzer als Speicherplatz, genauso wie wenn der Benutzer im Web statt mit dem mobilen Gerät ist? – Stallman

+0

BTW: Wie finden Sie den Quellcode? ... Es ist zu komplex zu wissen, welche Datei für diese Funktionalität verantwortlich ist ... – Stallman

+2

Ja. Diese Zeile ist insbesondere für den temporären Speicher gedacht, also haben sie das Cache-Verzeichnis erstellt, um dies zu bezeichnen. Für jede Android-App, PhoneGap oder native wird "/ data/data/packageName" als privater Bereich für die Dateien dieser App erstellt. PhoneGap verwendet in diesem Fall nur dieses Verzeichnis. – MattDavis