Descrizione del problema: Posso accedere alla memoria interna con il file o il file system-roots (leggi e scrivi). Ma un file di questo tipo non può accedere da un'altra app. Ad esempio, se desidero inviare questo file tramite emailComposerPlugin, non è possibile accedere al file dal client di posta elettronica. (Lo stesso vale per la funzione "Apri con".) Se cambio le opzioni {sandboxed: true}
su false (per scrivere nella memoria esterna), non funziona e finisce in un FileUtils.UNKNOWN_ERR. Ho provato l'applicazione mentre il telefono si disconnetteva dalla porta USB, in quanto alcuni documenti menzionavano l'impossibilità di accedere alla memoria esterna mentre erano montati sul PC - lo stesso risultato però.Come accedere alla memoria esterna con i file cordova/file-system-roots?
Da quello che ho letto su mailing list questo dovrebbe essere possibile. Sembra che mi manchi un punto cruciale?
Contesto: Si tenta di abilitare un'applicazione ibrida creata per iPhone per l'esecuzione su dispositivi Android. Per avere un piccolo parco giochi, creo un piccolo progetto di test.
Modifica: Sembra esserci un problema tra file-system-roots e plug-in di file. Ma ho le versioni più recenti di entrambi. (file: 1.0.1 File-system-radici: 0.1.0) Debug del file system e le classi di file mostrano che
private String fullPathForLocalURL(Uri URL) {
if (FILESYSTEM_PROTOCOL.equals(URL.getScheme()) && "localhost".equals(URL.getHost())) {
String path = URL.getPath();
if (URL.getQuery() != null) {
path = path + "?" + URL.getQuery();
}
return path.substring(path.indexOf('/', 1));
// path = "/cache-external" at this point
// results in index out of bounds exception
Cosa ho provato?
config.xml
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external" />
AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
codice javascript
function createTextDocument(filename, text) {
cordova.filesystem.getDirectoryForPurpose('cache', {sandboxed: false}, successCallback, failureCallback);
function successCallback(directoryEntry){
console.log('directory found (cordova): ' + directoryEntry.toURL());
console.log('directory found (native) : ' + directoryEntry.toNativeURL());
directoryEntry.getFile(filename, {create: true, exclusive: false},
function(fileEntry){
var filePath = fileEntry.toNativeURL();
fileEntry.createWriter(
function(fileWriter){
console.log('start writing to: ' + filePath);
fileWriter.write(text);
console.log('file written');
},failureCallback
);
}, failureCallback
);
}
function failureCallback(error){
console.log('error creating file: ' + error.code);
// results in code 1000
}
}
Potete fornire un esempio di lavoro pieno di scrivere nuovi file da sdcard esterno? –
Ho finito per usare questo codice: 'window.resolveLocalFileSystemURL ('file: /// storage/extSdCard /', function (fs) {var nativePath = fs.toURL(); alert (nativePath);}, function (err) {alert (err);}); ' –
Non sono sicuro di quanto il mio problema fosse simile. Ma avendo AndroidPersistentFileLocation per la compatibilità risolto il problema con il file system di Android per cordova v5 + –