ACTION OPEN DOCUMENT TREE sólo devuelve vacío Carpeta reciente
He copiado cuidadosamente el fragmento de código siguiente de una publicación anterior y funciona, en el simulador y también en mi dispositivo Nexus 9, hasta un punto!
Sin embargo, todo lo que obtengo es una carpeta reciente vacía y nunca llego al código que escribe un archivo.
- FileNotFoundException + Escribir un archivo en la tarjeta SD
- Java.io.ioexception: open failed: einval (argumento no válido) al guardar una imagen en un almacenamiento externo
- ¿Cómo puede acceder la aplicación a los archivos de almacenamiento USB OTG en Android 6.0 (API nivel 23) sin root?
- Leer archivo de texto sin procesar de Android
- Cómo guardar el archivo en la tarjeta sd
¿Qué debo cambiar para obtener un árbol de documentos adecuado?
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); } } }
- Leer archivo local en Phonegap
- Android: ¿Cómo almacenar datos en la memoria interna?
- Cómo crear un archivo en un directorio SDCARD
- Android SAF (Storage Access FrameWork): Obtenga un archivo Uri de TreeUri
- ¿Cómo puedo contar el número de archivos con una extensión específica en Android?
- Java - Línea aleatoria leer
- Cómo convertir mapa a bytes y guardar en almacenamiento interno
- Cómo agregar los datos escritos a un archivo?
Tuve el mismo problema que tú.
Hice clic en "Mostrar almacenamiento interno" en el menú de desbordamiento
Después de eso pude ver "Almacenamiento interno" en el cajón
Otros mencionaron la opción en DocumentsUI que el usuario debería activar manualmente. Sin embargo, hay otra opción. Agrega estos extras a tu ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT, ACTION_CREATE_DOCUMENT o ACTION_OPEN_DOCUMENT_TREE. El botón Explorar en Configuración de almacenamiento utiliza estos extras mientras se abre la aplicación DocumentsUI. Creo que el primero es suficiente para mostrar el almacenamiento interno y sdcard. Los otros son buenos para tener.
intent.putExtra("android.content.extra.SHOW_ADVANCED", true); intent.putExtra("android.content.extra.FANCY", true); intent.putExtra("android.content.extra.SHOW_FILESIZE", true);
No estoy seguro de si esto es lo que estás pidiendo, pero en el selector de carpetas, donde estás viendo sólo la carpeta reciente, hay un menú de desbordamiento donde se puede alternar entre mostrar / ocultar tarjeta SD.
Para mí su trabajo en el emulador, pero no en el teléfono Android 5 real. Incluso he comprobado google android Directory Selection muestra y también no funcionó.
Por lo tanto, es seguramente un error cuyo efecto se puede ver en algunos teléfonos.
Informar de este error a google y esperar hasta que se fija. Hasta entonces todo lo que puede hacer es restringir el acceso a la tarjeta de memoria en su aplicación, que es lo que no puede querer hacer. Pero creo que no hay nada que podamos hacer de nuestro lado antes de que Google lo corrija.
Si usted consigue cualquier solución para esto usted puede decirme también.