studio manejo intent ejemplo change activity android file android-intent intentfilter

manejo - Elija cualquier archivo amable a través de una intención en Android



intent send android (5)

Me gustaría iniciar un intentchooser para aplicaciones que pueden devolver cualquier tipo de archivo

Actualmente uso (que copié del código fuente del correo electrónico de Android para el archivo adjunto)

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); Intent i = Intent.createChooser(intent, "File"); startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);

Pero solo muestra "Galería" y "Reproductor de música" en mi Galaxy S2. Hay un explorador de archivos en este dispositivo y me gustaría que aparezca en la lista. También me gustaría que la aplicación de la cámara se muestre en la lista, para que el usuario pueda tomar una foto y enviarla a través de mi aplicación. Si instalo el administrador de archivos Astro, también responderá a esa intención. Mis clientes son solo propietarios de Galaxy SII y no quiero obligarlos a instalar el administrador de archivos Astro dado que ya tienen un administrador de archivos básico pero suficiente.

¿Alguna idea de cómo podría lograr esto? Estoy bastante seguro de que ya vi el administrador de archivos predeterminado aparecer en un menú para elegir un archivo, pero no recuerdo en qué aplicación.


El explorador de archivos de Samsung no solo necesita una acción personalizada ( com.sec.android.app.myfiles.PICK_DATA ), sino también la parte de la categoría (Intención. CATEGORY_DEFAULT ) y el tipo mime se deben pasar como extra.

Intent intent = new Intent("com.sec.android.app.myfiles.PICK_DATA"); intent.putExtra("CONTENT_TYPE", "*/*"); intent.addCategory(Intent.CATEGORY_DEFAULT);

También puede usar esta acción para abrir varios archivos: com.sec.android.app.myfiles.PICK_DATA_MULTIPLE. De todos modos, aquí está mi solución que funciona en Samsung y otros dispositivos:

public void openFile(String minmeType) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(minmeType); intent.addCategory(Intent.CATEGORY_OPENABLE); // special intent for Samsung file manager Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA"); // if you want any file type, you can skip next line sIntent.putExtra("CONTENT_TYPE", minmeType); sIntent.addCategory(Intent.CATEGORY_DEFAULT); Intent chooserIntent; if (getPackageManager().resolveActivity(sIntent, 0) != null){ // it is device with samsung file manager chooserIntent = Intent.createChooser(sIntent, "Open file"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent}); } else { chooserIntent = Intent.createChooser(intent, "Open file"); } try { startActivityForResult(chooserIntent, CHOOSE_FILE_REQUESTCODE); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getApplicationContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show(); } }

Esta solución funciona bien para mí, y tal vez sea útil para otra persona.


No para cámara sino para otros archivos ...

En mi dispositivo tengo ES File Explorer instalado y esto simplemente funciona en mi caso ...

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("file/*"); startActivityForResult(intent, PICKFILE_REQUEST_CODE);


Resulta que el explorador de archivos de Samsung usa una acción personalizada. Es por eso que pude ver el explorador de archivos de Samsung cuando buscaba un archivo de las aplicaciones de Samsung, pero no del mío.

La acción es "com.sec.android.app.myfiles.PICK_DATA"

Creé un Selector de actividades personalizado que muestra actividades que filtran ambos intentos.


Si desea saber esto, existe una biblioteca de código abierto llamada aFileDialog que es pequeña y fácil de usar y proporciona un selector de archivos.

La diferencia con las bibliotecas de otro selector de archivos para Android es que aFileDialog le ofrece la opción de abrir el selector de archivos como un Diálogo y como una Actividad.

También le permite seleccionar carpetas, crear archivos, filtrar archivos usando expresiones regulares y mostrar cuadros de diálogo de confirmación.


este trabajo para mí en galaxy note sus contactos de programa, administradores de archivos instalados en el dispositivo, galería, reproductor de música

private void openFile(Int CODE) { Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.setType("*/*"); startActivityForResult(intent, CODE); }

aquí obtengo el camino en el onActivityResult de la actividad de la actividad.

protected void onActivityResult(int requestCode, int resultCode, Intent data) { String Fpath = data.getDataString(); // do somthing... super.onActivityResult(requestCode, resultCode, data); }