2015-09-11 1 views
0

У меня есть приложение, которое генерирует большие выходные файлы. Я сохраняю их в папке «Загрузка» внутреннего хранилища, и я хочу извлечь их из папки «Загрузить» на смонтированном телефоне на моем ПК.Сохранение файла во встроенное внутреннее хранилище и загрузка его с ПК

код я использую содержит:

String filename="output.txt"; 
File dirname = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
FileWriter outFileWriter; 
outFile = new File(dirname, filename); 
outFileWriter = new FileWriter(outFile); 
outFileWriter.append(outputString); 
outFileWriter.close(); 

телефон является Oneplus2 и монтирует папку на Windows 7 как Computer\ONE A2001\Internal storage\Download

АзБР оболочки я могу видеть и читать файл, но компьютер не видит этого. Когда я копирую файл с моего компьютера в установленную папку Download, я вижу его там из оболочки adb, поэтому я знаю, что ищу подходящее место, но компьютер не может видеть выходной файл моего приложения.

ls -l дает:

[email protected]:/storage/sdcard0/Download $ ls -l 
ls -l 
-rw-rw---- root  sdcard_r 2030918 2015-09-11 17:24 copiedFromComputer.jpg 
-rw-rw---- root  sdcard_r 581632 2015-09-11 17:32 output.txt 

Таким образом, права доступа к файлам совпадают, но почему я не могу видеть мой output.txt файл с компьютера?

PS. Есть ли лучшая альтернатива для загрузки файлов с приложениями на ПК без использования резервной копии adb?

ответ

0

Хорошо, файл должен быть проиндексирован медиа-сканером после его создания, чтобы он был доступен для доступа.

Как и в http://developer.android.com/reference/android/os/Environment.html можно назвать в приложении:

// Tell the media scanner about the new file so that it is 
// immediately available to the user. 
MediaScannerConnection.scanFile(this, 
      new String[] { file.toString() }, null, 
      new MediaScannerConnection.OnScanCompletedListener() { 
     public void onScanCompleted(String path, Uri uri) { 
      Log.i("ExternalStorage", "Scanned " + path + ":"); 
      Log.i("ExternalStorage", "-> uri=" + uri); 
     } 
    }); 

или

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(outFile))); 

или из ADB оболочки:

[email protected]:/ $ am broadcast android.intent.action.MEDIA_MOUNTED 

Однако, если файл был изменен после него был проиндексирован, изменения не отражаются на его метаданных, таких как размер файла. Тем не менее, если вы загрузите его на свой компьютер, размер и другие метаданные будут исправлены.

Возможно, кто-то может прокомментировать, как обновить метаданные уже проиндексированного файла после изменения в системе Android.