Bonjour, je crée ce sujet car j'ai besoin de votre aide

j'ai une Activity avec un Preview pour scanner un QRCode mais j'ai un problème à la sortie de veille du téléphone car le preview reste noir et n'affiche plus rien

Ce problème ce passe uniquement quand je presse le bouton power pour mettre en veille et que je rappuie dessus pour sortir de veille, à l'appuie pour sortir de veille il y a une manipulation pour delocker le téléphone, ce lock screen a été mis en place par motorola, le téléphone est un motorola defy mini

J'ai la méthode onResume dans mon Activity qui permet de reprendre la camera et recrée le preview

elle est comme ceci :
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
protected void onResume(){
	    	//System.out.println("dans le resume");
	    	super.onResume();
	    	if(mCamera==null ){
	    		previewing=true;
	    		//System.out.println("camera nulle");
	    		mCamera = getCameraInstance();
	    		mPreview = new com.example.telegestion.CameraPreview(this, mCamera, previewCb, autoFocusCB);
 
	    		FrameLayout preview = (FrameLayout)findViewById(R.id.camera_preview);
		        preview.addView(mPreview);
 
	    	}
	    }
 
public static Camera getCameraInstance(){
	        Camera c = null;
	        try {
 
	            c = Camera.open();
	        } catch (Exception e){
	        }
	        return c;
	    }
pour le onPause j'ai cela :

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
 
public void onPause() {
	    	//System.out.println("pause");
	    	releaseCamera();
	        super.onPause();
 
	    }
 
 
private void releaseCamera() {
	        if (mCamera != null) {	
	            previewing = false;
	            mCamera.stopPreview();
	            mPreview.getHolder().removeCallback(mPreview);
                mCamera.setPreviewCallback(null);
                //mCamera.lock();
                mCamera.release();
                mCamera=null;
 
	        }
	    }
Voici la classe CameraPreview pour ceux qui en aurait besoin

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 
/*
 * Barebones implementation of displaying camera preview.
 * 
 * Created by lisah0 on 2012-02-24
 */
package com.example.telegestion;
 
import java.io.IOException;
 
import android.app.Activity;
import android.os.Bundle;
 
import android.util.Log;
 
import android.view.View;
import android.view.Surface;
import android.view.SurfaceView;
import android.view.SurfaceHolder;
 
import android.content.Context;
 
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.Parameters;
 
/** A basic Camera preview class */
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mHolder;
    private Camera mCamera;
    private PreviewCallback previewCallback;
    private AutoFocusCallback autoFocusCallback;
 
    public CameraPreview(Context context, Camera camera,PreviewCallback previewCb,AutoFocusCallback autoFocusCb) {
        super(context);
        mCamera = camera;
        previewCallback = previewCb;
        autoFocusCallback = autoFocusCb;
 
        /* 
         * Set camera to continuous focus if supported, otherwise use
         * software auto-focus. Only works for API level >=9.
         */
 
        Camera.Parameters parameters = camera.getParameters();
        parameters.setWhiteBalance(Parameters.WHITE_BALANCE_AUTO);
        parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
        parameters.setJpegQuality(100);
 
 
        mCamera.setParameters(parameters);
        /*for (String f : parameters.getSupportedFocusModes()) {
            if (f == Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) {
                parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
                mCamera.setParameters(parameters);
                autoFocusCallback = null;
                break;
            }
        }*/
 
 
        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        mHolder = getHolder();
        mHolder.addCallback(this);
 
        // deprecated setting, but required on Android versions prior to 3.0
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }
 
    public void surfaceCreated(SurfaceHolder holder) {
        // The Surface has been created, now tell the camera where to draw the preview.
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            Log.d("DBG", "Error setting camera preview: " + e.getMessage());
        }
    }
 
    public void surfaceDestroyed(SurfaceHolder holder) {
        // Camera preview released in activity
    }
 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        /*
         * If your preview can change or rotate, take care of those events here.
         * Make sure to stop the preview before resizing or reformatting it.
         */
        if (mHolder.getSurface() == null){
          // preview surface does not exist
          return;
        }
 
        // stop preview before making changes
        try {
            mCamera.stopPreview();
        } catch (Exception e){
          // ignore: tried to stop a non-existent preview
        }
 
        try {
            // Hard code camera surface rotation 90 degs to match Activity view in portrait
            mCamera.setDisplayOrientation(90);
 
            mCamera.setPreviewDisplay(mHolder);
            mCamera.setPreviewCallback(previewCallback);
            mCamera.startPreview();
            mCamera.autoFocus(autoFocusCallback);
        } catch (Exception e){
            Log.d("DBG", "Error starting camera preview: " + e.getMessage());
        }
    }
}
Ce que je ne comprends pas c'est que le preview se recharge correctement quand je presse le bouton home et que je rappuie sur l'icône pour lancer l'application

J'aimerais vraiment parvenir à résoudre le problème grâce à votre aide en tout cas

Merci par avance pour ceux qui prendront le temps de lire jusqu'au bout ^^