2016-02-11 1 views
0

Так что я знаю, что есть API доступа к SD-карте, который позволяет нам записывать файлы через DocumentProvider и DocumentFiles. Я работал над съемными SD-картами. Меня всегда путали внешние и внутренние хранилища. Я всегда думал, что внешнее хранилище - это всегда SD-карта, но сегодня я узнал, что это не так.Запись файлов в леденец в эмулированном хранилище?

У меня есть три вопроса.

Вопрос1, как узнать, хранятся ли файлы во внешнем эмулированном хранилище или SD-карте? Одним из решений может быть поиск экземпляров «sdcard0» или «эмулирование» в пути к файлу. Будет ли это решение работать всегда? Я имею в виду на всех телефонах?

Вопрос 2 Что использовать для записи файлов в эмулированных хранилищах (несъемное внешнее хранилище) обычных файлов или DocumentFile?

Вопрос 3 Если решение Q2 является файлом документа, то почему это не работает?

private static String [] getExtSdCardPaths() { Пути списка = новый ArrayList <>();

for (File file : GlobalSongList.GetInstance().getApplicationContext().getExternalFilesDirs("external")) { 

    if (file != null && !file.equals(GlobalSongList.GetInstance().getApplicationContext().getExternalFilesDir("external"))) { 
     int index = file.getAbsolutePath().lastIndexOf("/Android/data"); 
     if (index < 0) { 
      Log.w("StorageAccessAPI", "Unexpected external file dir: " + file.getAbsolutePath()); 
     } 
     else { 
      String path = file.getAbsolutePath().substring(0, index); 
      try { 
       path = new File(path).getCanonicalPath(); 
      } 
      catch (IOException e) { 
       // Keep non-canonical path. 
      } 
      paths.add(path); 
     } 
    } 
} 
return paths.toArray(new String[paths.size()]); 

}

ответ

0

Так что я знаю, что есть SD Card API доступа, который позволяет записывать файлы с помощью DocumentProvider и DocumentFiles.

Вы имеете в виду the Storage Access Framework. Это позволяет вам читать и писать потоки , а не файлы, где потоки поддерживаются поставщиками документов. Пользователь выбирает, какой поставщик документов должен использовать, что, в свою очередь, определяет, где хранится содержимое потока. Это может быть локальным (например, external storage, removable storage) или удаленным (Google Диск, Dropbox, файловый сервер Samba, веб-сервер, FTP-сервер, SFTP-сервер и т. Д.).

Как узнать, хранятся ли файлы во внешнем эмулированном хранилище или SD-карте?

Если вы используете платформу доступа к хранилищу, вы не знаете, где хранится содержимое потока.

Что нужно использовать для записи файлов в эмулированных хранилищах (несъемных внешних хранилищ) обычных файлов или DocumentFile?

Если вы явно хотите использовать внешнее хранилище, используйте внешнее хранилище.

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

Почему это не работает?

Я понятия не имею, что вы ожидаете от этого. Я ожидаю, что он вернет серию бесполезных строк.

+0

Итак, здесь используется Case, С моим приложением Я хочу отредактировать теги файлов Итак, у файлов есть пути, не так ли? теперь вы можете фактически создать documentFile из этого файла, как описано здесь, проверить второй ответ. Теперь это не работает для эмулируемого хранилища, которое я пытаюсь решить, задавая эти вопросы. –

+0

Вот ссылка http://stackoverflow.com/questions/26744842/how-to-use-the-new-sd-card -access-api-present-for-lollipop –

+0

Также, что вы подразумеваете под этим «Если вы явно хотите использовать внешнее хранилище, используйте внешнее хранилище» –

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