Choisissez un fichier de type via une intention sur Android

Je voudrais lancer un intentchooser pour les applications qui peuvent retourner n’importe quel type de fichier

Actuellement, j’utilise (que j’ai copié à partir du code source du courrier électronique 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 “Gallery” et “Music player” sur mon Galaxy S2. Il y a un explorateur de fichiers sur cet appareil et j’aimerais qu’il apparaisse dans la liste. Je voudrais aussi que l’application appareil photo apparaisse dans la liste, pour 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 ne sont propriétaires que 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 simple mais suffisant.

Une idée de comment je pourrais y arriver? Je suis sûr que j’ai 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 dans quelle application.

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

Dans mon appareil, j’ai ES File Explorer installé et cela fonctionne tout simplement dans mon cas ..

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

L’explorateur de fichiers Samsung nécessite non seulement une action personnalisée ( com.sec.android.app.myfiles.PICK_DATA ), mais également une partie de catégorie (Intention. CATEGORY_DEFAULT ) et un type MIME doivent être transmis en tant qu’extensions.

 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 Quoi qu’il en soit, voici ma solution qui fonctionne sur Samsung et d’autres périphériques:

 public void openFile(Ssortingng 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(); } } 

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

ce travail pour moi sur la galaxie note ses contacts d’exposition, les gestionnaires de fichiers installés sur l’appareil, la galerie, le lecteur de musique

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

ici obtenir le chemin dans onActivityResult de l’activité.

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

L’explorateur de fichiers Samsung utilise une action personnalisée. C’est pourquoi j’ai pu voir l’explorateur de fichiers Samsung lorsque je cherchais un fichier à partir des applications samsung, mais pas du 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.

Si vous voulez savoir cela, il existe une bibliothèque open source appelée aFileDialog, qui est un petit et facile à utiliser qui fournit un sélecteur de fichiers.

La différence avec les autres bibliothèques de sélecteurs de fichiers pour Android est qu’aFileDialog vous permet d’ouvrir le sélecteur de fichiers en tant que dialog et en tant qu’activité.

Il vous permet également de sélectionner des dossiers, de créer des fichiers, de filtrer des fichiers à l’aide d’expressions régulières et d’afficher des boîtes de dialog de confirmation.