2015-03-25 5 views
-1

Я разрабатываю гибридное приложение (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(); 
    }  
} 

ответ

1

Это не возможно, Apple ограничила доступ к файлу только приложение само-х. Таким образом, нет другого способа доступа к нему.

Вы можете просматривать файлы только в песочнице вашего приложения. Каждое приложение имеет папки «Документы», «Кэш» и «Темп». Я думаю, что первые два автоматически поддерживаются iTunes при подключении вашего устройства, последнее не поддерживается.

Пример, чтобы получить файлы в пути к папке Cache -

NSError *err  = nil; 
NSArray *myPathList = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *myPath = [myPathList objectAtIndex:0]; 
NSArray *dirContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:myPath error:&err]; 
if(err) NSLog(@"ERROR: %@",[err localizedDescription]); 
NSMutableArray *filePaths = nil; 

int count = (int)[dirContent count]; 
for(int i=0; i<count; i++) 
{ 
    [filePaths addObject:[dirContent objectAtIndex:i]]; 
} 
return filePaths; 
+0

Вы знаете, что папка «Нет Облако»? – Viswa

+0

Не уверен, что это. – Ajumal

+0

Это неверно: «Apple ограничила доступ к файлу только самому файлу приложения (папке« Документ »), поэтому нет другого способа доступа к нему». Существуют и другие папки, а не только каталог «Документы», о которых вы упоминаете позже, «Документы», «Кэш» и «Темп» (и каталог приложений). Вы должны сказать что-то вроде «Apple ограничила доступ к файлам только в песочнице вашего приложения, папках« Документы »,« Кэш »и« Временные папки ». – jcesarmobile

Смежные вопросы