Ответ 1
У меня была такая же проблема, как и у вас.
Я нажал "Показать внутреннее хранилище" в меню переполнения
После этого я смог увидеть "Внутреннее хранилище" в ящике
Я тщательно скопировал следующий фрагмент кода из более ранней публикации, и он работает, на симуляторе, а также на моем устройстве Nexus 9, до точки!
Однако все, что я получаю, это пустая папка Recent, и я никогда не достигаю кода, который записывает файл.
Что я должен изменить, чтобы получить правильное дерево документов?
private void testDocumentTree() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
}
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
String TAG = "onActivityResult";
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
// List all existing files inside picked directory
for (DocumentFile file : pickedDir.listFiles()) {
Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());
}
// Create a new file and write into it
DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
try {
OutputStream out = getContentResolver().openOutputStream(newFile.getUri());
out.write("A long time ago...".getBytes());
out.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File Not Found, reason: ", e);
} catch (IOException e) {
Log.d(TAG,"IOException, reason: ", e);
}
}
}
У меня была такая же проблема, как и у вас.
Я нажал "Показать внутреннее хранилище" в меню переполнения
После этого я смог увидеть "Внутреннее хранилище" в ящике
Другие упомянули опцию в DocumentsUI, которую пользователь должен включить вручную. Однако есть и другой вариант. Добавьте эти дополнения в свой ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT, ACTION_CREATE_DOCUMENT или ACTION_OPEN_DOCUMENT_TREE. Кнопка "Исследуйте" в настройках хранилища использует эти дополнительные функции при открытии приложения DocumentsUI. Я думаю, что первого достаточно, чтобы показать внутреннее хранилище и SD-карту. Остальным это хорошо.
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
intent.putExtra("android.content.extra.FANCY", true);
intent.putExtra("android.content.extra.SHOW_FILESIZE", true);
Не уверен, что это то, что вы просите, но в папке picker, где вы видите только последнюю папку, есть меню переполнения, в котором вы можете переключаться между SDK SD/SD.
Для меня это работает на эмуляторе, но не на реальном телефоне Android 5. Я даже проверил выбор Google Directory android Directory Selection, и он также не работал.
Итак, это, безусловно, ошибка, эффект которой можно увидеть на некоторых телефонах.
Сообщить об ошибке в Google и подождать, пока она не будет исправлена. До этого все, что вы можете сделать, это ограничить доступ к карте памяти в вашем приложении, и это то, что вы, возможно, не захотите делать. Но я думаю, что мы ничего не можем сделать с нашей стороны, прежде чем Google исправит его.
Если вы получите какое-либо обходное решение для этого, вы тоже можете мне рассказать.