[
https://issues.apache.org/jira/browse/CB-10798?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15186095#comment-15186095
]
Jason Ginchereau commented on CB-10798:
---------------------------------------
Or perhaps externalRootDirectory should not be deprecated, but this limitation
on Android 6+ should just be documented in the plugin quirks. Having the
externalDataDirectory path available may still be useful to applications which
do not intend to write directly to that root, but rather may intend to read or
write files in one of the media-specific subdirectories.
> Cannot create folder into cordova.file.externalRootDirectory on Android 6.x
> Marshmallow
> ---------------------------------------------------------------------------------------
>
> Key: CB-10798
> URL: https://issues.apache.org/jira/browse/CB-10798
> Project: Apache Cordova
> Issue Type: Bug
> Components: Plugin File
> Affects Versions: 4.1.1
> Environment: Android 6.0.1 (Nexus 9 and other 6.x devices), Cordova
> cli 6.0.0, Android platform 5.1.0
> Reporter: Vito Macchia
> Assignee: Jason Ginchereau
> Labels: android, triaged
>
> Cannot create folder into cordova.file.externalRootDirectory on Android 6.x
> Marshmallow. It always returns encording error (12), while on Android 5.x
> (Lollipop) the same code works fine.
> On Marshmallow devices I can succesfully create folders only into
> cordova.file.externalDataDirectory.
> No matter the value of preference AndroidPersistentFileLocation or
> AndroidExtraFilesystems.
> Code (some ES6, sorry)
> This snippet uses WinJS Promises - should work with native promises as well
> or you can just remove promises and pass succes and fail callbacks. It should
> create MY_Folder/test (both folders, like mkdirp) in the SD Card (regardless
> if emulated or not) root directory. It works fine with 5.x devices, but
> returns always FileError.ENCODING_ERR on Marshmallow.
> {code:title=createDirectory.js|borderStyle=solid}
> function errorCode(e) {
> var msg = '';
> switch (e.code) {
> case FileError.ABORT_ERR:
> msg = 'ABORT_ERR';
> break;
> case FileError.ENCODING_ERR:
> msg = 'ENCODING_ERR';
> break;
> case FileError.NOT_READABLE_ERR:
> msg = 'NOT_READABLE_ERR';
> break;
> case FileError.PATH_EXISTS_ERR:
> msg = 'PATH_EXISTS_ERR';
> break;
> case FileError.QUOTA_EXCEEDED_ERR:
> msg = 'QUOTA_EXCEEDED_ERR';
> break;
> case FileError.NOT_FOUND_ERR:
> msg = 'NOT_FOUND_ERR';
> break;
> case FileError.SECURITY_ERR:
> msg = 'SECURITY_ERR';
> break;
> case FileError.INVALID_MODIFICATION_ERR:
> msg = 'INVALID_MODIFICATION_ERR';
> break;
> case FileError.INVALID_STATE_ERR:
> msg = 'INVALID_STATE_ERR';
> break;
> default:
> msg = 'Unknown Error';
> break;
> };
> console.log('Error: ' + msg, "CODE", e);
> return msg;
> }
> const STATIC_CONTENT_DIR = 'MY_Folder/test';
> function createDirectory(startDirectory = cordova.file.externalRootDirectory)
> {
> return new WinJS.Promise(function(success, fail) {
> window.resolveLocalFileSystemURL(startDirectory, function(directory) {
> console.log("FS ROOT", directory);
> function fileGetDir(path, cb) {
> console.log("*** PATH", path);
> var fnGetOrCreateDir = function(p, de) {
> var entry = p.shift();
> console.log("PATH", path);
> if (entry) {
> de.getDirectory(entry, {
> create: true,
> exclusive: false
> }, function(dirEntry) {
> console.log("CR", dirEntry);
> fnGetOrCreateDir(p, dirEntry);
> }, fileFSError);
> } else
> if (cb) cb(de);
> };
> if (path) {
> var arPath = path.split("/");
> fnGetOrCreateDir(arPath, directory.filesystem.root);
> } else {
> if (cb) cb(directory);
> }
> }
> fileGetDir(STATIC_CONTENT_DIR, onSuccess);
> }, fileFSError);
> function fileFSError(e) {
> console.log(e.code);
> try {
> console.log("fileFSError: " + JSON.stringify(e) +
> errorCode(e));
> fail(e);
> } catch (err) {
> fail(err);
> }
> }
> function onSuccess(dirEntry) {
> console.log(dirEntry.fullPath);
> success(dirEntry.fullPath)
> }
> });
> }
> {code}
> I suspect it has something to do with the way the storage should be handled
> on Marshmallow, see for instance
> http://developer.android.com/guide/topics/data/data-storage.html and
> https://source.android.com/devices/storage/
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]