Elige cualquier tipo de archivo a través de una intención en Android


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

Actualmente uso (que copié del código fuente de 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 archivo Astro gerente de ti responderá a esa intención, también. Mis clientes son solo propietarios de Galaxy SII y no quiero obligarlos a instalar Astro file manager 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ú de este tipo para elegir un archivo, pero no puedo recordar en qué aplicación.

Author: Willi Mentzel, 2012-01-20

5 answers

No para la 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);
 66
Author: user370305,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-03 15:42:04

Samsung file explorer no solo necesita acción personalizada ( com.sec.androide.app.mis archivos.PICK_DATA ), pero también categoría parte (Intención. CATEGORY_DEFAULT ) y el tipo mime deben pasarse 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.androide.app.mis archivos.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 alguien más.

 37
Author: Chupik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-02 22:34:01

Este trabajo para mí en galaxy note su espectáculo contacto, administradores de archivos instalados en el dispositivo, galeria, reproductor de música

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

Aquí obtener ruta en onActivityResult de la actividad.

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

}
 30
Author: alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-25 00:16:20

Resulta que el explorador de archivos de Samsung utiliza una acción personalizada. Esta es la razón por la que pude ver el explorador de archivos de Samsung al buscar un archivo de las aplicaciones de Samsung, pero no de la mía.

La acción es " com.sec.androide.app.mis archivos.PICK_DATA "

He creado un selector de actividades personalizado que muestra actividades filtrando ambos intentos.

 0
Author: ErGo_404,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-23 10:41:13

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

La diferencia con las bibliotecas de otro selector de archivos para Android es que aFileDialog le da 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 diálogos de confirmación.

 0
Author: danigonlinea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-03 09:33:33