2015-04-29 2 views
0

Я хочу сохранить простой файл .txt на Android, а позже я хочу скопировать этот файл с устройства на компьютер, где устройство смонтировано как MTP- устройство.Не удается получить доступ к сохраненным файлам в общедоступной папке на Android (MTP)

У меня есть два Android устройств:

  • Nexus 4, сток Android 5.0.1
  • Nexus 7 2012, CyanogenMod 12, Android 5.0.2

Чтобы убедиться, что это не ошибка устройства Nexus Я попробовал телефон Wiko от друга.

Этот код используется для сохранения файла в папке «Загрузка» на внешнем хранилище. Это рекомендуется на странице разработчика.

private void saveData() 
    {  
     String fileName = "test.txt"; 
     String writeString = "Hello World"; 
     File filePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
     File saveFile = new File(filePath, fileName); 
     saveFile.setReadable(true); 

     try 
     { 
      boolean result = saveFile.createNewFile(); 
      if(result == true) 
      { 
       Log.i(TAG, "File successfully created"); 
      } 
      else 
      { 
       Log.i(TAG, "Error. File not created"); 
      } 
      BufferedWriter writer = new BufferedWriter(new FileWriter(saveFile)); 
      writer.write(writeString); 
      writer.close(); 
     } 
     catch(Exception e) 
     { 
      Log.e(TAG,e.toString()); 
     } 
    } 

Я использую следующие разрешения:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

При использовании MTP для подключения к устройству, я получаю пустую папку загрузки, но когда я получить доступ к папке через браузер файлов в Android (в моем case это ES File Browser) Я могу видеть файл и содержимое. Поэтому я думаю, что создание файла и запись на него работают.

При создании файла я получаю правильный журнал: «Файл успешно создан».

+0

МТР опирается на MediaStore зная файл. Вы должны вызвать MediaScanner в только что созданном файле. http://stackoverflow.com/questions/14449509/how-to-invoke-android-media-scanner-for-vendor-provided-external-sd-card-not-th. Отключение/выключение вашего устройства также поможет , Пожалуйста, поместите MTP в тему своего сообщения. – greenapps

+0

спасибо greenapps, что сработало для меня. – DarkRettich

ответ

0

Вам нужно добавить файл в MediaStore: (довольно много кода ...)

try { 
    new MediaScannerConnectionClient() { 
     private MediaScannerConnection mMs; 

     public void init() { 
      mMs = new MediaScannerConnection(myContext, this); 
      mMs.connect(); 
     } 

     @Override 
     public void onMediaScannerConnected() { 

      File pathFile = Environment 
        .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
      File scanFile = new File(pathFile, "test.txt"); 

      mMs.scanFile(scanFile.getAbsolutePath(), null); // <-- repeat for all files 

      mMs.disconnect(); 
     } 

     @Override 
     public void onScanCompleted(String path, Uri uri) { 
     } 

    }.init(); 
} catch(Exception e) { 
    // Device does not support adding files manually. 
    // Sending Broadcast to start MediaScanner (slower than adding manually) 
    try { 
     sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
       Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
    } catch(Exception ee) { 
     // Something went terribly wrong. 
     // Can't add file to MediaStore and can't send Broadcast to start MediaScanner. 
    } 
} 
+0

спасибо ByteHamster, я уже решил проблему. – DarkRettich

+2

Если вы нашли решение, оно было бы очень признательно и полезно для других, если бы вы отправили ответ самостоятельно, и вы отметили его как принятый. :) – ocramot

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