2015-09-25 13 views
5

In einer Cordova Android-App (scrollen Sie nach unten für Gerät, Version, Plugin-Liste, alles recht aktuell wie in diesem Schreiben) Ich möchte bevorzugt speichern Datei auf der externen SD-Karte und verwenden Sie internen Speicher, wenn SDCard nicht dort ist. Ich gründe meine speichern Pfad:Erzwingen externe SD-Karte auf Android mit Cordova und Datei-Plugin

persistentFS= cordova.file.externalDataDirectory||cordova.file.DataDirectory||fileSystem.root.toURL();

Sein eventuellen Wert Datei: ///storage/emulated/0/Android/data/com.fubar.app/files/, gleich wie cordova.file .externalDataDirectory.

Ich habe ein: <access origin="cdvfile://*" /> ... <preference name="AndroidPersistentFileLocation" value="Compatibility" /> <preference name="AndroidExtraFilesystems" value="files-external,sdcard,files,documents,cache,cache-external,root" /> in config.xml, <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

in AndroidManifest.xml und stellen verschiedene Verzauberungen in index.html Sicherheit Metatag. Ich füge hinzu, dass eine SD-Karte eingelegt ist, schreib-aktiviert und ich bestätige, dass ich dazu schreiben kann - zum Beispiel - einen Dateimanager. Es enthält den Ordner Android/data/com.fubar.myapp/files /, wie es sollte.

Alles umsonst: Dateien werden in den internen Gerätespeicher geschrieben - und daraus gelesen. Ich habe alle google scavenged zu diesem Thema gelesen, aber nichts hat mich näher an die Aufgabe gebracht (einige Leute empfehlen die Verwendung des Datei-System-Roots-Plugins, aber es scheint, durch das Datei-Plugin subsumiert worden zu sein).

Irgendwelche Hinweise? TIA, alf

Edit: adb shell benutzen, kann ich sehen, dass die externe SD-Karte Dateien Ordner für die App hat einen absoluten Pfad:

`/storage/extSdCard/Android/data/com.fubar.myapp/files` 

und ruft resolveLocalFileSystemURL auf

file:///storage/extSdCard/Android/data/com.fubar.myapp/files

glücklich gelingt. Ich denke nicht, dass dies der richtige Weg ist, da dieser Pfad geräteabhängig ist.


Gerät: Samsung Galaxy Tab 10.5, Lutscher 5.0.1 cordova mit 5.3.1, mit Plugins: cordova-plugin-Gerät 1.0.1 "Gerät" cordova-plugin-Dialoge 1.1.1 Benachrichtigung“ " cordova-plugin-file 3.0.0" Datei " cordova-plugin-Dateiübertragung 1.3.0" Dateiübertragung " cordova-plugin-media 1.0.1" Medien " cordova-plugin-whitelist 1.1.0" Weiße Liste“

Build-Host ist Linux FC21

Antwort

2

Yo Sie können Context.getExternalFilesDirs() anrufen. Dadurch wird ein Array von Verzeichnissen zurückgegeben, in die Ihre App Daten schreiben kann. Eine davon ist der SD-Kartenpfad/Speicher/SD-Kartenname/Android/Daten/Anwendungsname/Dateien.

Die meisten Hersteller legen auch die Umgebungsvariable SECONDARY_STORAGE fest, um den SD-Karten-Stammpfad verfügbar zu machen. Sie können versuchen, System.getenv("SECONDARY_STORAGE")

Android ruft keine API, mit denen Sie den Pfad des SD-Root-Pfad abrufen können. Sie können reflection verwenden und den sdcard root-Pfad von StorageManager abrufen.java -> getVolumePaths() - http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/storage/StorageManager.java#590

+2

Kann ich das in Cordova, in Javascript tun? Wenn ich es versuche, ist Context nicht definiert, also würde ich annehmen, dass es sich um eine Java-API handelt, von der Sie sprechen. –

0

Da scheint es keine echte Cordova Antwort zu geben, hier ist, was ich mit der file plugin gefunden habe. Ich wollte auch auf der SD-Karte speichern und die Daten werden später an E-Mails angehängt. Google Mail benötigt jetzt einen Anhang, der von SD geladen wird. Dieser Blog brachte mich in die richtige Richtung https://www.neontribe.co.uk/cordova-file-plugin-examples/. im Grunde ersetzen nur

window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (directoryEntry) { 

mit diesem

window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (directoryEntry) { 

Im Abschnitt reden über eine Datei zu schreiben und es sollte funktionieren.

+0

Es funktioniert nicht für mich. Ich bekomme immer noch nur einen Pfad für den internen Speicher (emuliert) auf meinem Gerät Galaxy S7. – JaSmin