Bonjour tout l'monde =)
J'utilise le provider MediaStore afin de faire prendre une photo par l'utilisateur de mon appli, et sauvegarder cette dernière pour être réutilisée plus tard dans le même programme.
Je rencontre deux difficultés :
1 ) Je n'arrive pas à stocker la photo ("permission denierd' sur le logcat). Pourtant j'ai bien la ligne :dans mon AndroidManifest.xml...
Code : Sélectionner tout - Visualiser dans une fenêtre à part <uses-permission android:name="android.permision.WRITE_EXTERNAL_STORAGE" />
2 ) Lorsque la photo est prise, dîtes moi si je me trompe, mais cette dernière est automatiquement stockée dans le tel avant même l'appel de la méthode onActivityResult ? Je demande cela car la photo est visible dans la galerie photo de mon Android (donc pas dans l'emplacement prévu) et avec un nom généré automatiquement (alors que je souhaite aussi donner un nom à cette photo). J'ai beau cherché, pas moyen de trouver le moyen d'éviter cette 'sauvegarde' automatique.. Le but et juste de stocker la photo avec un nom retrouvable dans la suite du programme sans être obligé de la sauvegarder à deux endroits différents (histoire de bouffer le moins d'espace possible..)
Voici mon code, j'ai commenté les parties qui me posent problèmes et mes tests/recherches avant de venir poster ici :
AndroidManifest.xml :
Slide_arbre.java:
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 <?xml version="1.0" encoding="utf-8"?> ... <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permision.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-feature android:name="android.hardware.camera" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity ... </activity> <activity android:name=".Arbre" > </activity> ...
Arbre.java : (activité principale)
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 public class Slide_arbre extends Fragment { ... public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup root = (ViewGroup) inflater.inflate(R.layout.slide_arbre, null); ... photo.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); //j'ai essayé d'utiliser EXTRA_OUTPUT pour donner le nom et/ou le chemin d'accès, mais sans succé... // intent.putExtra(MediaStore.EXTRA_OUTPUT, "photo"); // "click path :"+Environment.getExternalStorageDirectory()+"plop.jpg"); getActivity().startActivityForResult(intent, 1111); } }); return root; } }
Merci pour un peu d'aide
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 public class Arbre extends FragmentActivity { ... public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i("Arbre", "ICI"); Log.i("requestcode", String.valueOf(requestCode)); if (requestCode == 1111) { //je rentre bien ici Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes); File file = new File(Environment.getExternalStorageDirectory()+File.separator+ "tralala.jpg"); Log.i("path", Environment.getExternalStorageDirectory()+File.separator + "tralala.jpg"); //affiche : mnt/sdcard/tralala.jpg Log.i("file", file.toString()); // affiche la même chose try { //je rentre bien ici aussi d'après des log file.createNewFile(); //la permission denied du logcat pointe ici FileOutputStream fo = new FileOutputStream(file); //ptit test ci dessous, mais permission denied egalement //FileOutputStream fo = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+File.separator+"test.jpg")); fo.write(bytes.toByteArray()); fo.close(); } catch (IOException e) { ... } } } }
Partager