Explorateur de fichier
Résolu
lamouchetsetse
Messages postés
112
Date d'inscription
Statut
Membre
Dernière intervention
-
lamouchetsetse Messages postés 112 Date d'inscription Statut Membre Dernière intervention -
lamouchetsetse Messages postés 112 Date d'inscription Statut Membre Dernière intervention -
Bonjour, à tous,
je suis en train de faire une petite application qui permet de naviguer dans les dossier du téléphone ou de la tablette. Pour cela j'utilise la class File et j'affiche les résultat dans un adaptateur personnalisé sous forme de GridView ou listView en fonction du choix de l'utilisateur.
Si je rencontre un dossier, j'affiche une icône de dossier avec le nom du répertoire. Si je tombe sur un fichier, j'affiche une icône en fonction du type de fichier avec le nom du fichier.
Tout ce que j'ai fait jusque la fonctionne très bien. La ou ça ce gatte, c'est que je me suis dis qu'il serai mieux plutôt que d'afficher une icône pour les images ou les vidéos, d'afficher un aperçu.
Je me suis donc dis que j'allais prendre mon image d'origine et créer une mini image pour m'en servir d’aperçu. comme cela:
cette méthode fonctionne très bien lorsque dans le dossier parcouru il n'y a que 2 ou 3 images. Lorsqu'il y en à des centaines comme dans la galerie, le code plante car il est beaucoup top long à s'exécuter.
Existe t-il une solution pour obtenir une image miniature pour chaque images d'un dossier afin d'en faire un aperçu?
Sinon je sais que l'on peu lister les image contenues dans la galerie comme ceci
Est il possible d'utiliser un procédé similaire pour parcourir les dossiers?
Merci d'avance
je suis en train de faire une petite application qui permet de naviguer dans les dossier du téléphone ou de la tablette. Pour cela j'utilise la class File et j'affiche les résultat dans un adaptateur personnalisé sous forme de GridView ou listView en fonction du choix de l'utilisateur.
Si je rencontre un dossier, j'affiche une icône de dossier avec le nom du répertoire. Si je tombe sur un fichier, j'affiche une icône en fonction du type de fichier avec le nom du fichier.
Tout ce que j'ai fait jusque la fonctionne très bien. La ou ça ce gatte, c'est que je me suis dis qu'il serai mieux plutôt que d'afficher une icône pour les images ou les vidéos, d'afficher un aperçu.
Je me suis donc dis que j'allais prendre mon image d'origine et créer une mini image pour m'en servir d’aperçu. comme cela:
Bitmapimage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(monImage.getPath()), 150, 150); monImageView.setImageBitmap(image);
cette méthode fonctionne très bien lorsque dans le dossier parcouru il n'y a que 2 ou 3 images. Lorsqu'il y en à des centaines comme dans la galerie, le code plante car il est beaucoup top long à s'exécuter.
Existe t-il une solution pour obtenir une image miniature pour chaque images d'un dossier afin d'en faire un aperçu?
Sinon je sais que l'on peu lister les image contenues dans la galerie comme ceci
private void parcourirGalerie() { ActivityResultLauncher<Intent> launchSomeActivity = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { if(result.getResultCode() == Activity.RESULT_OK) { Uri imageSelectionnee = result.getData().getData(); String projection[] = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(imageSelectionnee, projection, null, null, null); cursor.moveToFirst(); int indexColonne = cursor.getColumnIndex(projection[0]); String cheminImage = cursor.getString(indexColonne); cursor.close(); Bitmap image = BitmapFactory.decodeFile(cheminImage); imageView.setImageBitmap(image); } else { Toast.makeText(getApplicationContext(), "Aucune image séléctionée", Toast.LENGTH_LONG).show(); } } }); bouton_parcourir_galerie.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent gallerieIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); launchSomeActivity.launch(gallerieIntent); } }); }
Est il possible d'utiliser un procédé similaire pour parcourir les dossiers?
Merci d'avance
Configuration: Linux / Firefox 91.0
A voir également:
- Explorateur de fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Explorateur de fichiers - Guide
- Comment réduire la taille d'un fichier - Guide
3 réponses
C'est bon j'ai trouvé la solution pour parcourir mes dossier à l'aide d'un intent. il suffit de remplacer la ligne 33 de la fonction "parcourirGalerie()" par:
Ceci dis, lors de l’exécution du onclick, j’atterris dans le dossier Téléchargement par défaut. J'aurais aimé partir du dossier racine. Il ne m'est pas non plus possible de changer de répertoire. Je vais continuer à fouiller, il dois bien y avoir un parametre qui permet de faire ce que je souhaite. Ou peut être est ce encore une histoire d'autorisation.
par contre je cherche toujours une solution permettant obtenir une image miniature afin d'afficher un aperçu des images contenue dans un dossier sans que cela ne prenne un temps monstre.
Merci.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
Ceci dis, lors de l’exécution du onclick, j’atterris dans le dossier Téléchargement par défaut. J'aurais aimé partir du dossier racine. Il ne m'est pas non plus possible de changer de répertoire. Je vais continuer à fouiller, il dois bien y avoir un parametre qui permet de faire ce que je souhaite. Ou peut être est ce encore une histoire d'autorisation.
par contre je cherche toujours une solution permettant obtenir une image miniature afin d'afficher un aperçu des images contenue dans un dossier sans que cela ne prenne un temps monstre.
Merci.
Bien j'avance un peu en rajoutant ceci je parviens à lancer l'exploration a partir du dossier que je souhaite
Mais voila, cela ne fonctionne que sur l’émulateur android-studio; Sur un téléphone je rest bloquer dans le dossier Téléchargement.
Je pense a un problème d'autorisations. Ceci dit j'arrive à naviguer sans problème dans mes dossier avec un objet File?? A suivre.
Je suis pas loin, je vais y arriver lol
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uriToLoad); // uriToLoad = Uri.fromFile(racine_SD_file)
Mais voila, cela ne fonctionne que sur l’émulateur android-studio; Sur un téléphone je rest bloquer dans le dossier Téléchargement.
Je pense a un problème d'autorisations. Ceci dit j'arrive à naviguer sans problème dans mes dossier avec un objet File?? A suivre.
Je suis pas loin, je vais y arriver lol
Bon, voici ce que j'ai finalement fais et qui fonctionne pour naviguer dans les dossier du téléphone:
Voila j’espère que c'est la bonne façon de faire. Et j’espère que ça épargnera à d'autres de nombreuse heures de recherche à essayer de comprendre la doc.
private void parcourirDossier() { // retour demande ActivityResultLauncher<Intent> launchSomeActivity2 = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { if (result.getResultCode() == Activity.RESULT_OK) { if(result.getData() != null) { if(result.getData().getClipData() != null) { for(int i=0; i<result.getData().getClipData().getItemCount(); i++) { Uri uri = result.getData().getClipData().getItemAt(i).getUri(); String projection[] = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); cursor.moveToFirst(); int indexColonne = cursor.getColumnIndex(projection[0]); String chemin_absolu_fichier = cursor.getString(indexColonne); cursor.close(); Log.e("chemin_absolu => ", chemin_absolu_fichier); } } } } } }); bouton_parcourirDossier.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // on indique que l'on souhaite utiliser l'explorateur de fichier Intent intent = new Intent(Intent.ACTION_GET_CONTENT); // on indique le type de fichier intent.setType("*/*"); // tout les fichiers //on masque les fichiers que l'on ne peu pas ouvrir intent.addCategory(Intent.CATEGORY_OPENABLE); // permet la séléction multiple intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); Intent i = Intent.createChooser(intent, "Choisisr fichier"); //on lance la demande try { launchSomeActivity2.launch(i); } catch (Exception e) { e.printStackTrace(); } } }); }
Voila j’espère que c'est la bonne façon de faire. Et j’espère que ça épargnera à d'autres de nombreuse heures de recherche à essayer de comprendre la doc.