我对 Android Studio 中的adb logcat
方法有疑问。
我见过很多教程,但没有一个能帮到我。请帮帮我:0
这是我的代码:
react-native log-ios
react-native log-android
清单权限:
takePicture();
此处错误代码:
Button button;
Camera cam = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cam = Camera.open();
button = (Button) findViewById(R.id.getrange);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cam.startPreview();
cam.takePicture(null, null, null, mPicture);
}
});
}
public static Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File dir = new File(Environment.getExternalStorageDirectory(), "Bewegungsmelder-App");
dir.mkdirs();
File file = new File(dir, "IMG_" + System.currentTimeMillis() + ".jpg");
if (file == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
};
@Override
protected void onPause() {
super.onPause();
cam.stopPreview();
cam.release();
cam = null;
}
@Override
protected void onResume() {
super.onResume();
cam = Camera.open();
}
感谢你的帮助D:
PS:Bewegungsmelder是德国人。它意味着运动检测器!
答案 0 :(得分:0)
在startService()
方法中拨打startPreview
,并在onPictureTaken
,
onClick
public static Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File dir = new File(Environment.getExternalStorageDirectory(), "Bewegungsmelder-App");
dir.mkdirs();
File file = new File(dir, "IMG_" + System.currentTimeMillis() + ".jpg");
if (file == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
camera.startPreview();
}
};
原因是一旦拍照,当前的预览就会被破坏,以便下次拍照时需要重新开始拍摄。
编辑:除了在致电startPreview
之前致电takePicture
之外,您已经忘记的另一件重要事情是,根据Android documentation point #5,您没有#&# 39;将surfaceHolder
传递给setPreviewDispaly(SurfaceHolder)
。首先,将SurfaceView添加到XML布局,并将id设置为preview
。其次,将SurfaceHolder
变量和SurfaceView
变量添加到类的顶部,
SurfaceHolder surfaceHolder;
SurfaceView surfaceView;
然后在onCreate
中,初始化变量,如此,
surfaceView = (SurfaceView) findViewById(R.id.preview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(surfaceCallback);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
现在,为surfaceHolder
,
SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback(){
public void surfaceCreated(SurfaceHolder holder) {
try {
cam.setPreviewDisplay(surfaceHolder);
} catch (Throwable t) {
}
}
public void surfaceChanged(SurfaceHolder holder,int format, int width,int height) {
Camera.Parameters params = cam.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
Camera.Size size = getBestPreviewSize(width, height, params);
Camera.Size pictureSize = getSmallestPictureSize(params);
if (size != null && pictureSize != null) {
params.setPreviewSize(size.width, size.height);
params.setPictureSize(pictureSize.width,
pictureSize.height);
cam.setParameters(params);
cam.startPreview();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
cam.stopPreview();
}
};
完成所有这些后,我不相信您需要startPreview
中的onClick
来电。但是,我认为为了使其工作,您可能必须使cam
成为静态变量以及其他变量。不是100%肯定。