Bonjour,
Après avoir parcouru différents blogs et forums, j'ai trouvé la solution pour réaliser une sélection multiple de photos dans la galeries et traiter les chemins trouvés vers ces photos:
Création de l'Intent:
Traitement de la sélection:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 parcourir.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setType("image/*"); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1); } });
Pour récupérer le chemin de l'image sur le téléphone:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 protected void onActivityResult(int requestCode, int resultCode, Intent data) { try { if (requestCode == 1 && resultCode == RESULT_OK && null != data) { String[] filePathColumn = { MediaStore.Images.Media.DATA }; Uri mImageUri = data.getData(); // cas fichier unique if(mImageUri != null){ String path = GetPathToImage (mImageUri); imagesEncodedList.add(path); Log.v("[DEBUG]", "Fichier: " + path); // cas plusieurs fichiers } else { ClipData mClipData = data.getClipData(); if (mClipData != null) { ArrayList<Uri> mArrayUri = new ArrayList<Uri>(); for (int i = 0; i < mClipData.getItemCount(); i++) { ClipData.Item item = mClipData.getItemAt(i); Uri uri = item.getUri(); String path = GetPathToImage (uri); Log.v("[DEBUG]", "Fichier: " + path); imagesEncodedList.add(path); } Log.v("LOG_TAG", "Selected Images" + mArrayUri.size()); } } } else { Toast.makeText(this, "Aucune image sélectionnée", Toast.LENGTH_LONG).show(); } } catch (Exception e) { Toast.makeText(this, "Une erreur est survenue", Toast.LENGTH_LONG).show(); } super.onActivityResult(requestCode, resultCode, data); }
(en espérant que ça puisse déjà servir à quelqu'un...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public String GetPathToImage(Uri uri){ String doc_id = null; String document_id = null; String path = null; String selection = Media._ID + " =? "; Cursor c1 = null; c1 = getContentResolver().query(uri, null, null, null, null); c1.moveToFirst(); document_id = c1.getString(0); doc_id = document_id.substring(document_id.lastIndexOf(":") + 1); c1.close(); c1 = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, selection, new String[] {doc_id}, null); if (c1 != null) { int columnIndex = c1.getColumnIndexOrThrow(Media.DATA); c1.moveToFirst(); path = c1.getString(columnIndex); } return path; }
Le problème... c'est que je ne comprends rien à ce qui a été fait. Rien c'est peut être exagérer, mais si le prends le code de la fonction getPathToImage(), je ne comprends pas comment sont réalisées et traitées les requêtes.
Je suis allé dans la doc, mais c'est soit très lourd soit très vide:
https://developer.android.com/guide/...er-basics.html
https://developer.android.com/refere...se/Cursor.html
Typiquement je prends la doc sur ClipData, je lis en en-tête:
Donc c'est une représentation complexe... ça n'aide pas à traiter son contenu.Representation of a clipped data on the clipboard.
ClipData is a complex type containing one or more Item instances, each of which can hold one or more representations of an item of data. For display to the user, it also has a label.
Où trouver de la doc avec un exemple d'application simple et "atomique", comme on trouverait:
- en php : http://php.net/manual/fr/function.substr.php (la meilleure doc de tous les temps)
- en vb : https://msdn.microsoft.com/fr-fr/lib...(v=vs.71).aspx
En Java je trouve des briques sur internet sans vraiment comprendre d'où elles viennent... c'est parfait pour faire une application robuste
Merci
Partager