2015-09-25 26 views
5

In un'applicazione cordova android (scorrere verso il basso per dispositivo, versione, elenco di plug-in, tutto abbastanza aggiornato al momento della stesura) Desidero memorizzare preferenzialmente file sulla SDCard esterna e utilizzare la memoria interna se SDCard non è presente. Sto impostando il percorso di salvataggio a:Forzare sdcard esterna su Android con cordova e plug-in file

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

Il suo valore finale è il file: ///storage/emulated/0/Android/data/com.fubar.app/files/, uguale a cordova.file .externalDataDirectory.

ho impostato: <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 e impostare vari incantesimi in index.html Security metatag. Aggiungo che una SDcard è inserita, abilitata per la scrittura e I confermano che posso scrivere ad essa con - per esempio - un gestore di file. Lo contiene la cartella Android/data/com.fubar.myapp/files /, come dovrebbe.

Tutto per niente: i file vengono scritti e letti dalla memoria interna del dispositivo. Ho letto tutto ciò che Google ha scavato su questo argomento, ma nulla mi ha avvicinato all'attività (alcuni suggeriscono di usare il plugin file-system-root, ma sembra che sia stato inserito dal plugin del file).

Eventuali suggerimenti? TIA, alf

Edit: Utilizzando adb shell, posso vedere che la cartella dei file sdcard esterna per l'applicazione ha un percorso assoluto di:

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

e chiamando resolveLocalFileSystemURL su

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

riesce felicemente. Non penso che sia la strada da percorrere, poiché quel percorso dipende dal dispositivo.


dispositivo: Samsung Galaxy tab 10.5, lollipop 5.0.1 utilizzando Cordova 5.3.1, con i plugin: Cordova-plugin-dispositivo 1.0.1 "Device" Cordova-plugin-dialoghi 1.1.1 "Notifica " cordova-plugin-file 3.0.0" File " cordova-plugin-file-transfer 1.3.0" File Transfer " cordova-plugin-media 1.0.1" Media " cordova-plugin-whitelist 1.1.0" Whitelist "

L'host di compilazione è Linux FC21

risposta

2

Yo puoi chiamare Context.getExternalFilesDirs(). Ciò restituisce una matrice di directory a cui l'app può scrivere dati. Uno dei quali sarà il percorso sdcard/storage/sdcardname/Android/data/appname/files.

La maggior parte dei produttori imposta anche la variabile di ambiente SECONDARY_STORAGE per esporre il percorso root della scheda SD. Puoi provare a chiamare System.getenv("SECONDARY_STORAGE")

Android non espone alcuna API che ti permetta di ottenere il percorso del percorso root della sdcard. È possibile utilizzare la reflection e ottenere il percorso root della sdcard da StorageManager.java -> getVolumePaths() - http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/storage/StorageManager.java#590

+2

Posso farlo in cordova, in javascript? Se provo, Context non è definito, quindi suppongo che sia un'API Java di cui stai parlando. –

0

Poiché non sembra esserci una vera risposta Cordova a questo ancora, ecco cosa ho trovato usando lo file plugin. Stavo anche cercando di salvare sulla scheda SD e successivamente i dati verranno allegati alla posta elettronica e Gmail ora richiede che un allegato venga caricato dalla SD. Questo blog mi ha fatto andare nella giusta direzione https://www.neontribe.co.uk/cordova-file-plugin-examples/. Nella sezione parlando di scrivere un file fondamentalmente solo sostituire

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

con questo

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

E si deve lavorare.

+0

Non funziona per me. Ricevo ancora solo il percorso per l'archiviazione interna (emulato) sul mio dispositivo Galaxy S7. – JaSmin