开发者

Unable start camera Preview on button click

I'm a newbie programmer for Android I was trying to start camera preview in Android on click of button. I'm trying directly to access camera hardware rather than using default camera application. Here is the code I've written

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class CameraHandler extends Activity {
    private SurfaceView sv = null;
    private SurfaceHolder previewHolder = null;

    private Button btnStop;
    private Button btnStart;
    private Camera camera = null;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cameraview);

    // Get the surface view from main layout
    sv = (SurfaceView) findViewById(R.id.cameraSurface);

    // Get the buttons from XML
    btnStart = (Button) findViewById(R.id.startButton);
    btnStop = (Button) findViewById(R.id.stopButton);



    btnStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
        // TODO Auto-generated method stub

        SurfaceHolder.Callback surfaceCallBack = new SurfaceHolder.Callback() {

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub

            camera.release();
        开发者_如何学运维    camera = null;
            }

            @Override
            public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            camera = Camera.open();
            try {
                camera.setPreviewDisplay(previewHolder);
            } catch (Throwable t) {
                // TODO Auto-generated catch block
                Log.e("PreviewDemo-surfaceCallback",
                    "Exception in setPreviewDisplay()", t);
                Toast.makeText(CameraHandler.this, t.getMessage(),
                    Toast.LENGTH_LONG).show();
            }
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder,
                int format, int width, int height) {
            // TODO Auto-generated method stub
            Camera.Parameters parameters = camera.getParameters();
            parameters.setPreviewSize(width, height);
            camera.setParameters(parameters);
            camera.startPreview();

            }
        };

        // Get the surface holder from the surface view
        previewHolder = sv.getHolder();

        // Now add these call backs
        previewHolder.addCallback(surfaceCallBack);
        previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
    });

    btnStop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
        // TODO Auto-generated method stub
        camera.stopPreview();
        }
    });
    }

}

As you can see I'm getting surface holder from the SurfaceView in XML adding it a call back when start button is clicked. For some reason SufraceHolder callback is not getting called. But If i place this entire code directly in onCreate function it works fine i.e camera preview starts as activity is launched. Am I missing something here?

Thanks in Advance


The SurfaceView is already created by the time the button is clicked. Hence, surfaceCreated() probably will not be called.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜