2014-08-10 4 views
3

Я думаю, это глупая ошибка, но я не могу помочь себе здесь ... Это мое первое Android-приложение. Я пытаюсь сохранить некоторые данные на эмулированной SD-карте, чтобы пользователь мог легко получить данные.Android: getExternalFilesDir - Путь не отображается на ПК

Этот класс должен написать некоторые поля данных на SD-карту

private final List<DataField> dataFields; 

    private final File exportFile; 
    private DateFormat simpleDate = new SimpleDateFormat("yyyyMMddhhmm"); 

    private CsvExporter(List<DataField> dataFields) { 
     this.dataFields = dataFields; 
     exportFile = new File(getTargetFolderPath(), getTargetFileName()); 
    } 

    private String getTargetFileName() { 
     return "export_" + (simpleDate.format(new Date())) + ".csv"; 
    } 

    private File getTargetFolderPath() { 
     //return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
     File targetFolder = getExternalFilesDir(null); 
     if (!targetFolder.exists()){ 
      if (!targetFolder.mkdirs()){ 
       Log.e("CsvWriter","Could not create targetFolder " + targetFolder); 
      }} 
     Log.d("CsvWriter","TargetFolder is " + targetFolder); 
     for (File f: targetFolder.listFiles()){ 
      Log.d("CsvWriter","Found file " + f); 
     } 
     return targetFolder; 
    } 

    private void initFile() throws IOException { 
     if (!exportFile.exists()) { 
      if (!exportFile.createNewFile()){ 
       Log.e("CsvWriter","Could not create targetFile " +exportFile); 
      } 
     } 
     Log.d("CsvWriter","targetFile is " +exportFile); 
    } 


    public File doExport() { 
     try { 
      initFile(); 
      List<String[]> data = convertToStrings(); 
      writeData(data); 
      readData(); 
      return exportFile; 
     } catch (IOException e) { 
      throw new RuntimeException("Unable to create or write to csv-File", e); 
     } 
    } 

Я отладки приложения на планшете Asus. Пока все работает нормально. Папка была создана в первый раз и существует сейчас. Файл записывается и также может читаться программно. Если я открою устройство с монитором устройства Android, я увижу файлы /mnt/shell/emulated/0/Android/data/my.package.name/files/. Это было полностью ожидаемо, и я счастлив, что это работает так гладко. Тем не менее, когда я установить андроид-устройства на моем компьютере, моя папка не видна под /Android/data/my.package.name/files

android.permission.WRITE_EXTERNAL_STORAGE меня включен в моем AndroidManifest.xml

You может видеть другой подход, когда я выбираю папку загрузки в качестве моей цели. Снова я вижу файлы при просмотре дерева каталогов с монитором устройства Android (/ shell/emulated/0/Download /), но не вижу файлы, когда я открываю папку «Загрузить» на устройстве на моем компьютере.

Что я делаю неправильно? Isnt getExternalFilesDir должен возвращать папку, видимую поверх usb?

Edit: Вот скриншот моего адм и мой FileBrowser ... Screenshot if my adm and my filebrowser.

Edit2: Я решил проблему. Спасибо :) Фиксированный doExport():

 public File doExport() { 
     try { 
      initFile(); 
      List<String[]> data = convertToStrings(); 
      writeData(data); 
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + getTargetFolderPath()))); 
      //readData(); 
      return exportFile; 
     } catch (IOException e) { 
      throw new RuntimeException("Unable to create or write to csv-File", e); 
     } 
    } 

Я настоятельно рекомендую прочитать this question

+0

u означает, что вы найдете данные под ur app имя пакета – KOTIOS

+0

@adcom: я не понимаю ваш вопрос .. – samjaf

ответ

4

Isnt getExternalFilesDir должен вернуть папку видимой через USB?

Да, но только после того, как файл в папке был проиндексирован MediaStore. Вы можете запросить его индексирование с помощью MediaScannerConnection and scanFile().

Для получения дополнительной информации, у меня есть a blog post specifically about this situation.

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