我按照视频里面写的,没问题啊。为什么摄像头还是打不开呢,
并且触摸屏幕应该会显示2个按钮,也不显示。检测他的显示是0啊,难道被盖住了?
教程就这么布局的没问题呢,下面是项目
http://pan.baidu.com/share/link?shareid=303524&uk=2233679321

解决方案 »

  1.   

    package org.example.camera;
    /**
     * 该版本完成了 连拍功能,并且完善了照片的处理信息,通过修改exif信息修正照片方向
     * 
     * 
     */
    import java.io.IOException;import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.Context;
    import android.content.Intent;
    import android.hardware.Camera;
    import android.hardware.Camera.CameraInfo;
    import android.hardware.Camera.Parameters;
    import android.hardware.Camera.PreviewCallback;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.Surface;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.FrameLayout;
    import android.widget.Toast;public class MyCamera20130206Activity extends Activity implements SurfaceHolder.Callback,OnClickListener{
        /** Called when the activity is first created. */
    private static final String TAG = "Camera";
    private FrameLayout mFrameLayout;
    private SurfaceView mSurfaceView;
    private SurfaceHolder mSurfaceHolder;
    private Camera mCamera;
    private CameraInfo[] mCameraInfo;
    private int mNumberOfCamera;
    private int mBackCameraId = -1,mFrontCameraId = -1;
    private Parameters mParameters;

    private int mCameraStatus;
    private final static int STOP_PREVIEW = 0;
    private final static int START_PREVIEW = 1;

    private Context mContext;

    //for test
    public Button takePictureButton;
    String fileName = null;
    public Button autofocusButton;
    public int pictureOrientation = 0;

    public Button settingsButton;

    private ContentResolver mContentResolver;
    //for test

    //if too much work to do in CameraStartUp can do it in this thread
    private class CameraStartUpThread extends Thread{
    public void run(){
    //mCamera = Camera.open(mBackCameraId);
    }
    }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Log.v("TAG","onCreate");
            mContext = this;
            //initFullScreen(mContext);
            getContentResoler(mContext);
            initView();
            initCamera();
            initSurfaceHolder();
        }    @Override
    protected void onResume() {
    // TODO Auto-generated method stub
         Log.v("TAG","onresume");
    super.onResume();
    }
        
    @Override
    protected void onPause() {
    Log.v("TAG","onpause");
    stopPreview();
    releaseCamera();
    super.onPause();
    } @Override
    protected void onStop() {
    Log.v("TAG","stop");
    // TODO Auto-generated method stub
    super.onStop();
    }

    @Override
    protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    } public void initView(){
    Log.v("TAG","initView");

         mFrameLayout = (FrameLayout)findViewById(R.id.cameraframe);
            mSurfaceView = (SurfaceView)findViewById(R.id.camera_screen);
            
            // for test
            takePictureButton = (Button)findViewById(R.id.takepicture);
            takePictureButton.setOnClickListener(this);
            autofocusButton = (Button)findViewById(R.id.autofocus);
            autofocusButton.setOnClickListener(this);
            settingsButton = (Button)findViewById(R.id.settings);
            settingsButton.setOnClickListener(this);
            // for test
        }
    public void initCamera(){
    Log.v("TAG","initCamera");
    setCameraInfo();
    setCameraId();
    }
        
        public void initSurfaceHolder(){
         Log.v("TAG","initSurafaceHolder");
         mSurfaceHolder = mSurfaceView.getHolder();
         mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
         mSurfaceHolder.setKeepScreenOn(true);
            mSurfaceHolder.addCallback(this);
        }
        
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {

    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    openCamera();
    prepareCamera();
    setDisplayOrientation(mContext);
    setParameters();
    startPreview();
    mParameters = mCamera.getParameters();
    Log.v("TAG",""+mParameters.flatten());


    }
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    stopPreview();
    releaseCamera();

    }
    private void setCameraInfo() {
    Log.v("TAG","setCameraInfo");
    mNumberOfCamera = Camera.getNumberOfCameras();
    Log.v("TAG",""+mNumberOfCamera);
    if(mNumberOfCamera == 0){
    Toast.makeText(getApplicationContext(), "not camera ", 0).show();
    //finish();
    }
    mCameraInfo = new CameraInfo[mNumberOfCamera];
    for(int i=0;i<mNumberOfCamera;i++){
    mCameraInfo[i] = new CameraInfo();
    Camera.getCameraInfo(i, mCameraInfo[i]);
    }
    }
    private void setCameraId() {
    Log.v("TAG","setCameraId");
    for(int i=0;i<mNumberOfCamera;i++){
    if(mBackCameraId == -1 && mCameraInfo[i].facing == CameraInfo.CAMERA_FACING_BACK){
    mBackCameraId = i;
    }else if(mFrontCameraId == -1 && mCameraInfo[i].facing == CameraInfo.CAMERA_FACING_FRONT){
    mFrontCameraId = i;
    }
    }
    }
    //open back camera as default
    private void openCamera(){
    try{
    //     mCamera = Camera.open(mBackCameraId);
    mCamera = Camera.open(0);
    }catch (Exception e){

    }
    }
    private void prepareCamera(){
    try {
    mCamera.setPreviewDisplay(mSurfaceHolder);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    private void startPreview(){
    mCamera.startPreview();
    }
    private void stopPreview(){
    if(mCameraStatus == START_PREVIEW)
    mCamera.stopPreview();
    }
    private void releaseCamera(){
    if(mCamera != null){
    mCamera.release();
    mCamera = null;
    }
    }
    private void setDisplayOrientation(Context context){
    int rotation = ((Activity) context).getWindowManager()
               .getDefaultDisplay().getRotation();
    int degree = 0;
    switch (rotation) {
    case Surface.ROTATION_0: degree = 0; break;
    case Surface.ROTATION_90: degree = 90; break;
    case Surface.ROTATION_180: degree = 180; break;
    case Surface.ROTATION_270: degree = 270; break;
    }
    int result;
    CameraInfo info = new CameraInfo();
    //Camera.getCameraInfo(mBackCameraId, info);
    Camera.getCameraInfo(0, info);
    if(info.facing == CameraInfo.CAMERA_FACING_FRONT){
    result = (info.orientation + degree) % 360;
    result = (360 - result) % 360;
    }else{
    result =(info.orientation - degree + 360 ) % 360;
    }
    mCamera.setDisplayOrientation(result);
    Log.v("TAG","result:"+result);
    pictureOrientation = result;
    }
    private void setParameters(){
    mParameters = mCamera.getParameters();
    // mParameters.setPictureSize(1280, 768);
    // mParameters.setPreviewSize(1280, 720);
    Log.v("TAG","max:"+mParameters.getMaxZoom());
    mCamera.setParameters(mParameters);
    } @Override
    public void onClick(View v) {
    int id = v.getId();
    switch (id) {
    case R.id.takepicture:
    //mCamera.takePicture(null, null, null,new JpegPictureCallback());
    //Toast.makeText(getApplicationContext(), "before take", 0).show();
    //mCamera.setPreviewCallbackWithBuffer(new JpegPreviewCallback());
    mCamera.setPreviewCallback(new JpegPreviewCallback());

    break; case R.id.autofocus:
    mCamera.autoFocus(null);
    break;
    case R.id.settings:
    Intent settingsIntent = new Intent(mContext, MyCameraSettings20130207Activity.class);
    startActivity(settingsIntent);
    stopPreview();
    releaseCamera();
    break;
    }


    }

    class JpegPictureCallback implements Camera.PictureCallback{
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
    try {
    camera.stopPreview();
    camera.startPreview();
    } catch (Exception e) {
    // TODO: handle exception
    }
    }
    }
        class JpegPreviewCallback  implements PreviewCallback {
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
    //Toast.makeText(getApplicationContext(), "take", 0).show();
    final byte[] yuvdata = data;
    Thread save = new Thread(new Runnable() {
    @Override
    public void run() {
    Log.v("TAG","save jpeg size"+yuvdata.length);
    fileName = System.currentTimeMillis() + ".jpeg";
    boolean mIsSave = Storage.savePicture(yuvdata, fileName,
    mCamera.getParameters().getPreviewSize(),
    pictureOrientation,mContentResolver,mContext);
    if(!mIsSave){
    Log.v("TAG","save fail");
    }
    }
    });
    save.start();
    mCamera.setPreviewCallback(null);
    }
        } //for storage
        private void getContentResoler(Context context){
         mContentResolver = context.getContentResolver();
        }
        //for storage
    }
    这个可以跑起来 你对比一下吧