takePicture failed in lollipop

2019-05-03 21:44发布

问题:

The following code is in service that takes picture in background. It is working fine for all the version below lollipop but gives run-time exception in takePicture(null,null,mcall). Any ideas..?

   public void takePictures(final int delay) 
{
      final Camera.PictureCallback mCall = new Camera.PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                Log.e(TAG, "Picture taken, saving....");
                Uri uriTarget = getContentResolver().insert//(Media.EXTERNAL_CONTENT_URI, image);
                        (MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
                OutputStream imageFileOS;
                try {
                    imageFileOS = getContentResolver().openOutputStream(uriTarget);
                    imageFileOS.write(data);
                    imageFileOS.flush();
                    imageFileOS.close();
                    Log.e("Image saved: ", uriTarget.toString());
                    savePictures(getRealPathFromURI(uriTarget.toString()));
                    mCamera.stopPreview();
                    mCamera.release();
                    mCamera = null;

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    Log.e("Image not  saved: ", e.toString());
                } catch (IOException e) {
                    Log.e("Image not  saved:2 ", e.toString());
                    e.printStackTrace();
                }

            }
        };
        if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
           thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int numOfPicturesAlreadyTaken = 0; numOfPicturesAlreadyTaken < numOfPictures; numOfPicturesAlreadyTaken++) {

                            Log.e(TAG, "Opening camera");
                            mCamera = Camera.open();
                            //mCamera.setPreviewDisplay(sv.getHolder());
                            parameters = mCamera.getParameters();
                            parameters.setRotation(90);
                            mCamera.setParameters(parameters);
                            mCamera.startPreview();

                            mCamera.takePicture(null, null, mCall);


                            Thread.sleep(delay);




                    }
                }
            });
            thread.start();
        } else {
            Toast.makeText(this, "No camera found.", Toast.LENGTH_SHORT).show();
        }
    }

the error come in lollipop only
the code is in service that take picture in background .


java.lang.RuntimeException: takePicture failed
            at android.hardware.Camera.native_takePicture(Native Method)
            at android.hardware.Camera.takePicture(Camera.java:1436)
            at android.hardware.Camera.takePicture(Camera.java:1381)
            at com.codebrew.lockdown.services.CameraService$2.run(CameraService.java:133)
            at java.lang.Thread.run(Thread.java:818)