Bonjour,

Je me permet de poster sur ce forum car je ne trouves vraiment pas de solution a mon problème !
Je souhaite prendre une photo et l'enregistrer sur le téléphone

J'ai mis en place une SurfaceView pour prendre la photo mais lors de l'enregistrement sa bloque !
En effet j'ai une erreur dans le log cat qui me dit (Permission Denied)

Voici le code :

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
 
Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
 
		public void onPictureTaken(byte[] data, Camera camera) {
 
			//String fl = "test.jpg";
	        File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
	        "/DCIM/Camera/pictures/test.jpg");
 
	        // Current state of the external media
	        String extState = Environment.getExternalStorageState();
 
	        // External media can be written onto
	        if (extState.equals(Environment.MEDIA_MOUNTED))
	        {
	                try {
	                        // Make sure the path exists
	                       // boolean exists = (new File(path2)).exists();  
 
	                       /* if (!exists){
	                                new File(path2).mkdirs(); 
	                        } */ 
	                        // Open output stream
	                        FileOutputStream fOut = new FileOutputStream(path);
	                       // Log.e("lol", path+fl);
	                        fOut.write(data);
	                        // Close output stream
	                        fOut.flush();
	                        fOut.close();
 
	                } catch (IOException ioe) {
	                        ioe.printStackTrace();
	                }
			}
		}
	};
Et voici l'erreur :

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
 
05-11 09:04:57.156: W/System.err(3702): java.io.FileNotFoundException: /mnt/sdcard/DCIM/Camera/pictures/test.jpg (Permission denied)
05-11 09:04:57.195: W/System.err(3702): 	at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
05-11 09:04:57.195: W/System.err(3702): 	at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239)
05-11 09:04:57.195: W/System.err(3702): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
05-11 09:04:57.195: W/System.err(3702): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:77)
05-11 09:04:57.195: W/System.err(3702): 	at com.test.android.AppareilPhotoActivity$1.onPictureTaken(AppareilPhotoActivity.java:163)
05-11 09:04:57.195: W/System.err(3702): 	at android.hardware.Camera$EventHandler.handleMessage(Camera.java:612)
05-11 09:04:57.195: W/System.err(3702): 	at android.os.Handler.dispatchMessage(Handler.java:99)
05-11 09:04:57.195: W/System.err(3702): 	at android.os.Looper.loop(Looper.java:132)
05-11 09:04:57.195: W/System.err(3702): 	at android.app.ActivityThread.main(ActivityThread.java:4134)
05-11 09:04:57.195: W/System.err(3702): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-11 09:04:57.195: W/System.err(3702): 	at java.lang.reflect.Method.invoke(Method.java:491)
05-11 09:04:57.195: W/System.err(3702): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-11 09:04:57.195: W/System.err(3702): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-11 09:04:57.195: W/System.err(3702): 	at dalvik.system.NativeStart.main(Native Method)
05-11 09:04:57.203: W/System.err(3702): java.io.FileNotFoundException: /mnt/sdcard/DCIM/Camera/pictures/test.jpg (Permission denied)
05-11 09:04:57.203: W/System.err(3702): 	at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
05-11 09:04:57.203: W/System.err(3702): 	at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239)
05-11 09:04:57.203: W/System.err(3702): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
05-11 09:04:57.203: W/System.err(3702): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:77)
05-11 09:04:57.203: W/System.err(3702): 	at com.test.android.AppareilPhotoActivity$1.onPictureTaken(AppareilPhotoActivity.java:163)
05-11 09:04:57.203: W/System.err(3702): 	at android.hardware.Camera$EventHandler.handleMessage(Camera.java:618)
05-11 09:04:57.203: W/System.err(3702): 	at android.os.Handler.dispatchMessage(Handler.java:99)
05-11 09:04:57.203: W/System.err(3702): 	at android.os.Looper.loop(Looper.java:132)
05-11 09:04:57.203: W/System.err(3702): 	at android.app.ActivityThread.main(ActivityThread.java:4134)
05-11 09:04:57.203: W/System.err(3702): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-11 09:04:57.203: W/System.err(3702): 	at java.lang.reflect.Method.invoke(Method.java:491)
05-11 09:04:57.203: W/System.err(3702): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-11 09:04:57.203: W/System.err(3702): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-11 09:04:57.203: W/System.err(3702): 	at dalvik.system.NativeStart.main(Native Method)
Pourtant j'ai bien déclaré les droits dans mon manifest voici un extrait de celui ci !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
    <uses-permission android:name="android.permision.WRITE_EXTERNAL_STORAGE"></uses-permission>
	<uses-permission android:name="android.permission.WRITE_SETTINGS" />
	<uses-permission android:name="android.permision.WRITE_SECURE_SETTINGS"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
	<uses-permission android:name="android.permission.CAMERA"></uses-permission>
	<uses-feature android:name="android.hardware.camera"/>
	<uses-feature android:name="android.hardware.camera.autofocus"/>
	<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
J'ai fait un test j'ai essayé ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/test");
if (!f.exists()) {
  f.mkdir();
}
Sans succès, il y a donc un problème de droit d'écriture !!!
Mais je ne vois pas du tout ce qu'il manque !
Si quelqu'un a une idée

Cordialement