studio seleccionar programacion móviles listar explorador desarrollo curso archivos archivo aplicaciones abrir android android-intent folder android-sdcard

seleccionar - manual de programacion android pdf



Android: ¿Cómo abrir una carpeta específica a través de Intent y mostrar su contenido en un buscador de archivos? (8)

Pensé que sería fácil, pero desafortunadamente no es así.

Lo que tengo:

Tengo una carpeta llamada "myFolder" en mi almacenamiento externo (no una tarjeta SD porque es un Nexus 4, pero ese no debería ser el problema). La carpeta contiene algunos archivos *.csv .

Lo que quiero:

Quiero escribir un método que haga lo siguiente: mostrar una variedad de aplicaciones (navegadores de archivos) desde donde puedo elegir una (ver foto). Después de hacer clic en él, el buscador de archivos seleccionado debería comenzar y mostrarme el contenido de "myFolder". Ni mas ni menos.

Mi pregunta:

¿Cómo exactamente hago eso? Creo que me acerqué bastante al siguiente código, pero no importa lo que haga, y estoy seguro de que debe haber algo que aún no entendí, siempre abre solo la carpeta principal del almacenamiento externo.

public void openFolder() { File file = new File(Environment.getExternalStorageDirectory(), "myFolder"); Log.d("path", file.toString()); Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setDataAndType(Uri.fromFile(file), "*/*"); startActivity(intent); }


Esto debería funcionar:

Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() + "/myFolder/"); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(selectedUri, "resource/folder"); if (intent.resolveActivityInfo(getPackageManager(), 0) != null) { startActivity(intent); } else { // if you reach this place, it means there is no any file // explorer app installed on your device }

Por favor, asegúrese de tener instalada cualquier aplicación de explorador de archivos en su dispositivo.

EDITAR: agregó una recomendación de shantanu del comentario.

BIBLIOTECAS : También puede echar un vistazo a estas bibliotecas de selectores de archivos / directorios https://android-arsenal.com/tag/35 si la solución actual no lo ayuda.


Finalmente lo tengo funcionando. De esta forma, solo unas pocas aplicaciones son mostradas por el selector (Google Drive, Dropbox, Root Explorer y Solid Explorer). Está funcionando bien con los dos exploradores, pero no con Google Drive y Dropbox (supongo que porque no pueden acceder al almacenamiento externo). El otro tipo MIME como "*/*" también es posible.

public void openFolder(){ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath() + File.separator + "myFolder" + File.separator); intent.setDataAndType(uri, "text/csv"); startActivity(Intent.createChooser(intent, "Open folder")); }


Pareces cerca.

Intentaría configurar el URI así:

String folderPath = Environment.getExternalStorageDirectory()+"/pathTo/folder"; Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); Uri myUri = Uri.parse(folderPath); intent.setDataAndType(myUri , "file/*"); startActivity(intent);

Pero no es tan diferente de lo que has intentado. Dinos si cambia algo?

También asegúrese de que la carpeta de destino existe, y eche un vistazo al objeto Uri resultante antes de enviarlo a la intención , puede que no sea lo que se espera.


este código funcionará con OI File Manager:

File root = new File(Environment.getExternalStorageDirectory().getPath() + "/myFolder/"); Uri uri = Uri.fromFile(root); Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setData(uri); startActivityForResult(intent, 1);

puede obtener el Administrador de archivos de OI aquí: http://www.openintents.org/en/filemanager archivos


File temp = File.createTempFile("preview", ".png" ); String fullfileName= temp.getAbsolutePath(); final String fileName = Uri.parse(fullfileName) .getLastPathSegment(); final String filePath = fullfileName. substring(0,fullfileName.lastIndexOf(File.separator)); Log.d("filePath", "filePath: " + filePath);

fullfileName :

/mnt/sdcard/Download_Manager_Farsi/preview.png

filePath :

/ mnt / sdcard / Download_Manager_Farsi


Intent chooser = new Intent(Intent.ACTION_GET_CONTENT); Uri uri = Uri.parse(Environment.getDownloadCacheDirectory().getPath().toString()); chooser.addCategory(Intent.CATEGORY_OPENABLE); chooser.setDataAndType(uri, "*/*"); // startActivity(chooser); try { startActivityForResult(chooser, SELECT_FILE); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); }

En el código anterior, si setDataAndType es "* / *" se abre un explorador de archivos integrado para elegir cualquier archivo, si configuro "texto / normal", se abre Dropbox. Tengo instalado Dropbox, Google Drive. Si desinstalo Dropbox, solo "* / *" funciona para abrir el buscador de archivos. Esto es Android 4.4.2. Puedo descargar contenido de Dropbox y de Google Drive, por getContentResolver (). OpenInputStream (data.getData ()).


Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("text/csv"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), 0); } catch (android.content.ActivityNotFoundException ex) { ex.printStackTrace(); }

entonces solo necesitas agregar la respuesta

public void onActivityResult(int requestCode, int resultCode, Intent data){ switch (requestCode) { case 0: { //what you want to do //file = new File(uri.getPath()); } } }


private static void openFolder(Activity activity, String folder) throws ActivityNotFoundException { String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + folder + File.separator; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(path)), "resource/folder"); intent.putExtra("org.openintents.extra.ABSOLUTE_PATH", path); activity.startActivity(Intent.createChooser(intent, "Choose app")); }

Esta solución usa el tipo de intento correcto y el tipo de recurso