web-dev-qa-db-fra.com

Choisissez n'importe quel type de fichier via une intention sur Android

Je souhaite lancer un programme d'intention pour les applications pouvant renvoyer n'importe quel type de fichier.

J'utilise actuellement (que j'ai copié à partir du Android pour la pièce jointe)

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);

Mais il ne montre que "Galerie" et "Lecteur de musique" sur mon Galaxy S2. Il existe un explorateur de fichiers sur cet appareil et j'aimerais qu'il apparaisse dans la liste. J'aimerais également que l'application de l'appareil photo apparaisse dans la liste, afin que l'utilisateur puisse prendre une photo et l'envoyer via mon application. Si j'installe le gestionnaire de fichiers Astro, il répondra également à cette intention. Mes clients sont uniquement propriétaires de Galaxy SII et je ne veux pas les forcer à installer le gestionnaire de fichiers Astro, car ils disposent déjà d’un gestionnaire de fichiers basique mais suffisant.

Une idée de comment je pourrais y arriver? Je suis presque sûr d'avoir déjà vu le gestionnaire de fichiers par défaut apparaître dans un tel menu pour choisir un fichier, mais je ne me souviens plus en quelle application.

82
ErGo_404

Pas pour la caméra mais pour d'autres fichiers ..

Dans mon appareil, j'ai ES File Explorer installé et cette chose fonctionne dans mon cas ..

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

L'explorateur de fichiers Samsung nécessite non seulement une action personnalisée (com.sec.Android.app.myfiles.PICK_DATA), mais également une partie catégorie (Intention .CATEGORY_DEFAULT) et le type mime doivent être passé comme extra.

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

Vous pouvez également utiliser cette action pour ouvrir plusieurs fichiers: com.sec.Android.app.myfiles.PICK_DATA_MULTIPLE En tout cas voici ma solution qui fonctionne sur Samsung et d'autres appareils:

public void openFile(String mimeType) {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(mimeType);
        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", mimeType); 
        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();
        }
    }

Cette solution fonctionne bien pour moi et sera peut-être utile pour quelqu'un d'autre.

44
Chupik

ce travail pour moi sur galaxy note ses contacts de spectacle, gestionnaires de fichiers installés sur le périphérique, galerie, lecteur de musique

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

voici le chemin dans onActivityResult d'activité.

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

}
37
alireza

Il s'avère que l'explorateur de fichiers Samsung utilise une action personnalisée. C'est pourquoi je pouvais voir l'explorateur de fichiers Samsung lorsque je cherchais un fichier dans les applications Samsung, mais pas dans le mien.

L'action est "com.sec.Android.app.myfiles.PICK_DATA"

J'ai créé un sélecteur d'activité personnalisé qui affiche les activités filtrant les deux intentions.

1
ErGo_404