Я разрабатываю гибридное приложение (POC) с помощью Cordova и Sencha Touch 2.4, цель - разработать файловый проводник.Проводник для Android и iOS
На самом деле я сделал это с помощью Кордова File API, и я могу получить доступ ко всем папкам и файлам в Android, но в прошивкой я могу иметь возможность читать только Нет Облако Папка (Не знаю, что эта папка) ,
Я хочу получить доступ к полной структуре папок в iOS, точно так же, как Android.
После нескольких поисков я получил информацию о том, что в IOS мы не можем получить доступ к файловой системе с помощью браузера Safari, это то же самое для Hybrid App?
Есть ли другой способ достичь этого?
Это то, что я делаю, используя File API. Я запрашиваю файловую систему (ROOT Folder), и когда пользователь нажимает любую папку, я читаю файлы и папки в этой папке. Когда пользователь нажимает файл, я просто показываю предупреждение о том, что пользователь выбрал файл.
Кордова [config.xml]
<preference name="iosExtraFilesystems"
value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />
<preference name="AndroidExtraFilesystems"
value="files,files-external,documents,sdcard,cache,cache-external,root" />
Controller Код
browseFs : function(button, e, eOpts){
Ext.Viewport.add(this.getFileBrowserWindow());
this.getFileBrowserWindow().show();
this.getFileBrowserWindow().mask();
this.createFileSysList(MTDProduct.app.currentDir);
},
fileBack : function(button, e, eOpts){
this.getFileBrowserWindow().mask();
this.createFileSysList(MTDProduct.app.parentDir);
},
createFileSysList : function(currentDir){
console.log(currentDir);
var me = this;
if(!currentDir){
currentDir = MTDProduct.app.rootFolder;
}
MTDProduct.app.currentDir = currentDir;
var directoryReader = currentDir.createReader();
Ext.getStore('filesList').removeAll();
directoryReader.readEntries(function(entries){
var dirArr = new Array();
var fileArr = new Array();
for(var i=0; i<entries.length; ++i){
var entry = entries[i];
var data;
if(entry.isDirectory && entry.name[0] != '.') {
data = { name: entry.name, type: 'Directory'}
}
else if(entry.isFile && entry.name[0] != '.'){
data = { name: entry.name, type: 'File'}
}
Ext.getStore('filesList').add(data);
Ext.getStore('filesList').sync();
}
currentDir.getParent(function(parent){
MTDProduct.app.parentDir = parent;
me.getFileBack().show();
},
function(error){
me.getFileBack().hide();
alert('Get parent error: '+error.code);
});
me.getFileBrowserWindow().unmask();
}, function(error){
me.getFileBrowserWindow().unmask();
alert('listDir readEntries error: '+error.code);
});
},
fileTap : function(list, index, target, record, e, eOpts){
this.getFileBrowserWindow().mask();
var data = record.getData();
var currentDir = MTDProduct.app.currentDir;
var me = this;
if(data.type == 'Directory' && currentDir != null){
console.log('Directory');
currentDir.getDirectory(data.name, {create:false},
function(dir){
me.createFileSysList(dir);
},
function(error){
alert('Unable to find directory: '+error.code);
}
);
}
else if(data.type == 'File' && currentDir != null){
alert('Selected a file');
me.getFileBrowserWindow().unmask();
me.getFileBrowserWindow().hide();
}
}
Вы знаете, что папка «Нет Облако»? – Viswa
Не уверен, что это. – Ajumal
Это неверно: «Apple ограничила доступ к файлу только самому файлу приложения (папке« Документ »), поэтому нет другого способа доступа к нему». Существуют и другие папки, а не только каталог «Документы», о которых вы упоминаете позже, «Документы», «Кэш» и «Темп» (и каталог приложений). Вы должны сказать что-то вроде «Apple ограничила доступ к файлам только в песочнице вашего приложения, папках« Документы »,« Кэш »и« Временные папки ». – jcesarmobile