Android:Camera.takePicture回调不';不要总是触发
可能90%的情况下,回调将无法触发。 因此我的照片永远不会保存 我做错了什么Android:Camera.takePicture回调不';不要总是触发,android,camera,photo,image,Android,Camera,Photo,Image,可能90%的情况下,回调将无法触发。 因此我的照片永远不会保存 我做错了什么 @Override public boolean onTouchEvent(MotionEvent event) { boolean result = super.onTouchEvent(event); int action = event.getAction(); if(action == MotionEvent.ACTION_DOWN) {
@Override
public boolean onTouchEvent(MotionEvent event)
{
boolean result = super.onTouchEvent(event);
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN)
{
takePicture();
this.finish(); // ERROR IS HERE. Closing down before callback is done.
}
return result;
}
private void takePicture() {
if (mCamera != null)
mCamera.takePicture(shutterCallback, null, jpegCallback);
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
AudioManager meng = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
int volume = meng.getStreamVolume( AudioManager.STREAM_NOTIFICATION);
if (volume != 0)
{
MediaPlayer _shootMP = MediaPlayer.create(getBaseContext(), Uri.parse("file:///system/media/audio/ui/camera_click.ogg"));
_shootMP.start();
}
Toast.makeText(CameraActivity.this, "Picture Taken", Toast.LENGTH_SHORT).show();
}
};
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] _data, Camera _camera) {
// TODO Do something with the image RAW data.
int test = 1;
}
};
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] _data, Camera _camera) {
File photo=new File(Environment.getExternalStorageDirectory(), "photo1.jpg");
if (photo.exists()) {
photo.delete();
}
try {
FileOutputStream fos=new FileOutputStream(photo.getPath());
fos.write(_data);
fos.close();
}
catch (java.io.IOException e) {
Log.e("PictureDemo", "Exception in photoCallback", e);
}
SqlDB.SavePhoto(1, _data);
}
};
您可以调试并检查它是否在任何函数rawCallback或jpegCallback中运行。您是否正在为相机设置jpeg格式。我想根据这个回调函数会被调用。因此,它应该进入rawCallback或jpegCallback。你能试一下吗 takePicture(shutterCallback、rawCallback、jpegCallback) 如果它失败了,那么它的方向可能是你再次打开相机的某个地方。在这种情况下,我认为您的相机参数将被重置,并可能返回原始回调而不是jpeg
事实上,我认为如果相机没有崩溃,并且它不是空的,那么剩下的唯一情况是你正在用默认设置重置相机,或者你正在再次打开相机 我本来一直在做建议的事。我只是将raw设置为null,因为这是不需要的,并且会有一个额外的回调。它的回调设置(也称为mCamera)不为空,但很少触发回调。这就是我希望您检查一次的内容,如果它失败,那么它的去向可能是您再次打开相机的某个地方。在这种情况下,我认为您的相机参数将被重置,并可能返回原始回调而不是jpeg。一旦拍摄图像,它将关闭活动。重新获取照片的唯一方法是重新加载活动,从而再次初始化它。除非它在回调完成之前关闭活动(并处理摄像头),否则问题似乎就在于此。在拍照之后->
完成此操作。
调用onPause()
,释放相机。因此,回调会丢失其摄影机对象。我现在看看情况如何,如果问题真的解决了,我会做正确的标记。事实上,我认为如果相机没有崩溃,并且它不是空的,那么这是唯一剩下的情况。。