Bonjour à tous, j'ai un petit problème lorsque j'essaye d'utiliser la caméra : ça marche avec un émulateur API8, mais pas sur un avec la version 2.3.1 d'android.
J'ai aussi testé sur un téléphone (HTC Desire) et ça plante : dans le log cat j'ai "Fail to connect to camera service" sur la ligne "Camera.open();"

J'ai mis la permission dans le manifest, et déjà regardé sur le net, je n'ai rien trouvé, si quelqu'un à une solution, voilà 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
public class Preview extends SurfaceView implements SurfaceHolder.Callback{
        SurfaceHolder mHolder;
        Camera mCamera;
 
        public Preview(Context context, AttributeSet att) {
                super(context, att);
 
                // Install a SurfaceHolder.Callback so we get notified when the
                // underlying surface is created and destroyed.
                mHolder = getHolder();
                mHolder.addCallback(this);
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
 
        public Preview(Context context) {
                super(context);
 
                // Install a SurfaceHolder.Callback so we get notified when the
                // underlying surface is created and destroyed.
                mHolder = getHolder();
                mHolder.addCallback(this);
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
 
        public Camera getCamera(){
                return mCamera;
        }
 
        public void surfaceCreated(SurfaceHolder holder) {
                // The Surface has been created, acquire the camera and tell it where
                // to draw.
                mCamera = Camera.open();
                try {
                   mCamera.setPreviewDisplay(holder);
                } catch (IOException exception) {
                        mCamera.release();
                        mCamera = null;
                        // TODO: add more exception handling logic here
                }
        }
 
        public void surfaceDestroyed(SurfaceHolder holder) {
                // Surface will be destroyed when we return, so stop the preview.
                // Because the CameraDevice object is not a shared resource, it's very
                // important to release it when the activity is paused.
                mCamera.stopPreview();
                mCamera.release();
                mCamera = null;
        }
 
        public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
                // Now that the size is known, set up the camera parameters and begin
                // the preview.
                Camera.Parameters parameters = mCamera.getParameters();
                parameters.setPreviewSize(h, w);
                mCamera.setParameters(parameters);
                mCamera.startPreview();
        }
 
}