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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 <uses-permission android:name="android.permision.WRITE_EXTERNAL_STORAGE" />
dans mon AndroidManifest.xml...

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 :
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>
...
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
 
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;
	}
}
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
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) {
                ...
            }
        }
    }
}
Merci pour un peu d'aide