我知道这个问题已被多次询问,但我无法找到适合我案例的答案。我要做的是在点击事件上调用takePicture()
,如下所示:
FrameLayout take_picture_btn = (FrameLayout) view.findViewById(R.id.take_picture_btn);
mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp;
MediaStore.Images.Media.insertImage(activity.getContentResolver(), bitmap, imageFileName, "");
editProfile.showPhotoEditor(true, bitmap);
}
};
take_picture_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Camera cam = mPreview.getCamera();
cam.takePicture(null, null, mPicture);
}
});
从其他帖子中我发现camera.stopPreview()
或camera.release()
不应该过早调用,因此我确保我不会在任何地方调用这些方法。但是,似乎在某处使用了stopPreview,因为在调用onPictureTaken回调之前,相机预览会冻结。在adition中,回调在KitKat4.4上运行良好,但它并不适用于Lollipop5.1
我的logcat中有以下消息:
05-10 21:01:09.766 9613-9626/com.emplicore W/CameraBase: Camera service died!
05-10 21:01:09.766 9613-9626/com.emplicore W/CameraBase: mediaserver's remote binder Camera object died
05-10 21:01:09.766 9613-9613/com.emplicore E/Camera: Error 100
这也证明了在调用回调之前相机已停止,但是我不明白为什么会发生这种情况,因为我确信我没有阻止它。
一旦发生点击事件,可能会发生其他一些事件吗?顺便说一句,我也尝试在拍照之前开始预览 - cam.startPreview()
,但这并没有解决问题。