Android Camera api没有停止预览

时间:2014-10-24 15:33:09

标签: android camera preview

我的问题是: 拍照后相机预览不会停止,它仍处于预览模式。这只发生在带有android 4.4的Samsung S3上。在其他设备上它可以工作。

你能帮助我吗?

这是我的代码:

public static class PlaceholderFragment extends Fragment {

    private CameraPreview mCameraPreview;
    private boolean pozeaza=false;
    View rootView;

    public PlaceholderFragment() {
    }
    LinearLayout preview;
    boolean isPreviewRunning;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_dvcamera_retake,
                container, false);

      //  mCamera = getCameraInstance();

     //   initializeCamera(mCamera);



        //mCameraPreview = new CameraPreview(this.getActivity(), mCamera);
        final TextView mTextField = (TextView) rootView
                .findViewById(R.id.textView1);
         preview = (LinearLayout) rootView
                .findViewById(R.id.camera_preview);
        bt1 = (Button) rootView.findViewById(R.id.button1);
        bt2 = (Button) rootView.findViewById(R.id.button2);
        bt3 = (Button) rootView.findViewById(R.id.button3);
        bt4 = (Button) rootView.findViewById(R.id.button4);
        bt3.setVisibility(View.GONE);
        bt4.setVisibility(View.GONE);

    //  if (preview != null) {
    //      preview.addView(mCameraPreview);
    //  }
        Button button = (Button) rootView.findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!pozeaza)
                {
                    pozeaza=true;

                    mCamera.setPreviewCallback(null);
                    mCamera.takePicture(null, null, mPicture);

                }
            }
        });
        Button button1 = (Button) rootView.findViewById(R.id.button2);
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                Activity ac = (Activity) ct;

                ac.finish();

                Intent intent = new Intent(ac, MainActivity1.class);


                intent.putExtra("key", key);
                intent.putExtra("cardID", cardID);
                ac.startActivity(intent);
            }
        });
        bt3.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                /*Activity ac = (Activity) ct;

                ac.finish();

                Intent intent = new Intent(ac, DVCameraActivitySnapSite.class);
                ac.startActivity(intent);*/
                bt3.setVisibility(View.GONE);
                bt4.setVisibility(View.GONE);
                bt1.setVisibility(View.VISIBLE);
                bt2.setVisibility(View.VISIBLE);
                mCamera.startPreview();
            }
        });
        bt4.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                progressTask().execute("");
                Activity ac = (Activity) ct;

                ac.finish();

                Intent intent = new Intent(ac, MainActivity1.class);
                intent.putExtra("result", 2);
                ac.startActivity(intent);
            }
        });

    //  int msec = (Integer.parseInt(config.getSnapDelay()))*1000;

        return rootView;
    }

    private Camera getCameraInstance() {
        Camera camera = null;
        int cameraCount = 0;

        try {
            Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            cameraCount = Camera.getNumberOfCameras();
            if(camO==1)
                for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
                    Camera.getCameraInfo( camIdx, cameraInfo );
                    if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT  ) {
                        try {
                            camera = Camera.open( camIdx );
                        } catch (RuntimeException e) {

                        }
                    }
                }
            else
                for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
                    Camera.getCameraInfo( camIdx, cameraInfo );
                    if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK  ) {
                        try {
                            camera = Camera.open( camIdx );
                        } catch (RuntimeException e) {

                        }
                    }
                }
            //camera = Camera.open();
            //  camera.setDisplayOrientation(90);
            //Parameters parameters = camera.getParameters();

            //parameters.set("jpeg-quality", 70);
            //  parameters.setPictureFormat(PixelFormat.JPEG);


            //  parameters.setPictureSize(480, 640);





            //  camera.setParameters(parameters);

        } catch (Exception e) {
            // cannot get camera or does not exist
        }
        return camera;
    }
    protected void initializeCamera(Camera mCamera) {
        isPreviewRunning=true;
        mCameraPreview = new CameraPreview(this.getActivity(), mCamera);
        preview = (LinearLayout) rootView
                .findViewById(R.id.camera_preview);
        if (preview != null) {
            preview.addView(mCameraPreview);
        }

    }
    @Override
    public void onPause() {
        super.onPause();  // Always call the superclass method first

        // Release the Camera because we don't need it when paused
        // and other activities might need to use it.


        if(mCamera!=null){
            mCamera.stopPreview();
            mCamera.setPreviewCallback(null);
            mCameraPreview.getHolder().removeCallback(mCameraPreview);
            preview.removeView(mCameraPreview);
            mCamera.release();
            mCamera = null;
        }
    }

    @Override
    public void onResume() {
        super.onResume();  // Always call the superclass method first

        // Get the Camera instance as the activity achieves full user focus
       /* if (mCamera == null) {
            mCameraPreview = new CameraPreview(this.getActivity(), mCamera);
            preview = (LinearLayout) rootView
                    .findViewById(R.id.camera_preview);

            if (preview != null) {
                preview.addView(mCameraPreview);
            }

            // initializeCamera(); // Local method to handle camera init
        }*/
    //    mCamera.setPreviewCallback(null);

        //if (mCamera==null){
            mCamera=getCameraInstance();
        //}
        initializeCamera(mCamera);
    }


    PictureCallback mPicture = new PictureCallback() {

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            pozeaza=false;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
            String yourText = sdf.format(Calendar.getInstance().getTime());
            File store = Environment.getExternalStorageDirectory();
             dateTaken=yourText;
            filename1=comp +"_" +yourText+".jpg";
            path = store.getAbsolutePath()
                    + "/com.wyseos.virtualclock/" + comp +"_" +yourText+".jpg";
            pictureFile = new File(path);




            try {
                dataBit=data;

                // BitmapFactory.Options options = new
                // BitmapFactory.Options();
                // options.inPreferredConfig = Bitmap.Config.ARGB_8888;
                // Bitmap bitmap = BitmapFactory.decodeFile(path, options);
                // timestampItAndSave(bitmap);
                // camera.release();


                bt1.setVisibility(View.GONE);
                //bt2.setVisibility(View.GONE);
                bt3.setVisibility(View.VISIBLE);
                bt4.setVisibility(View.VISIBLE);
                //progressTask().execute("");
                //Activity ac = (Activity) ct;

                //ac.finish();

                //Intent intent = new Intent(ac, MainActivity1.class);

                //ac.startActivity(intent);
                rotation=getRotation(getActivity());
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


    };


}

0 个答案:

没有答案