90 votes

Android : Comment ouvrir un dossier spécifique via Intent et afficher son contenu dans un navigateur de fichiers ?

Je pensais que ce serait facile, mais ce n'est malheureusement pas le cas.

Ce que j'ai :

J'ai un dossier appelé "myFolder" sur mon stockage externe (pas la carte sd car il s'agit d'un Nexus 4, mais cela ne devrait pas être le problème). Le dossier contient quelques *.csv des dossiers.

Ce que je veux :

Je veux écrire une méthode qui fait ce qui suit : Afficher une variété d'applications (navigateurs de fichiers) parmi lesquelles je peux en choisir une (voir l'image). Après avoir cliqué dessus, le navigateur de fichiers sélectionné doit démarrer et m'afficher le contenu de "monDossier". Rien de plus, rien de moins.

enter image description here

Ma question :

Comment faire exactement ? Je pense que j'y suis arrivé avec le code suivant, mais quoi que je fasse - et je suis certain qu'il y a quelque chose que je n'ai pas encore compris - il n'ouvre toujours que le dossier principal du stockage externe.

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

1voto

Abtin tashakor Points 29

Ce code fonctionnera avec le gestionnaire de fichiers OI :

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

Vous pouvez obtenir le gestionnaire de fichiers OI ici : http://www.openintents.org/en/filemanager

1voto

kreker Points 1447
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, DocumentsContract.Document.MIME_TYPE_DIR);
startActivity(intent);

Ouvre l'écran d'accueil de l'application fichiers enter image description here

0voto

j__m Points 5167

Aujourd'hui, vous devez représenter un dossier à l'aide de son contenu : URI obtenu à partir du cadre d'accès au stockage, et l'ouvrir devrait être aussi simple que :

Intent i = new Intent(Intent.ACTION_VIEW, uri);
startActivity(i);

-1voto

Renato Martins Points 174
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();
}

il suffit alors d'ajouter la réponse

public void  onActivityResult(int requestCode, int resultCode, Intent data){

switch (requestCode) {
  case 0: {
     //what you want to do
    //file = new File(uri.getPath());
  }
}
}

-2voto

Guian Points 2481

Vous semblez proche.

J'essaierais de définir l'URI comme suit :

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

Mais ce n'est pas si différent de ce que vous avez essayé. Dites-nous si cela change quelque chose ?

Assurez-vous également que le dossier ciblé existe, et jetez un coup d'œil sur le résultat de l'analyse. Uri avant de l'envoyer au intention Il se peut qu'il ne corresponde pas à ce que l'on attend de nous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X