gpt4 book ai didi

java - 如何在 Android 中的 onCreate 方法而不是 onClick 中拍照?

转载 作者:行者123 更新时间:2023-11-30 02:36:30 25 4
gpt4 key购买 nike

我正在做一个拍照的项目。当我保持原样时它目前工作正常,但是当我尝试更改它以便尝试以不同的方法拍摄照片(而不是通过 onClick() 方法激活)时,它每次都会出错.目前工作代码如下:

public class Testing123 extends Activity {

private SurfaceView preview=null;
private SurfaceHolder previewHolder=null;
private Camera camera=null;
private boolean inPreview=false;
private boolean cameraConfigured=false;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
preview = (SurfaceView)findViewById(R.id.preview);
previewHolder = preview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

testing(); //HERE is where I am testing, but cannot get it to work. [See part 2]
}

public void onResume() {
super.onResume();
if (camera == null) {
camera=Camera.open();
L.m("Camera open in onResume");
}
startPreview();
}

public void onPause() {
if (inPreview) {
camera.stopPreview();
}
camera.release();
camera=null;
inPreview=false;
super.onPause();
}

public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.options, menu);
return(super.onCreateOptionsMenu(menu));
}

public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.camera) {
if (inPreview) {
camera.takePicture(null, null, photoCallback); //THIS IS WHERE THE PHOTO IS BEING TAKEN
inPreview=false;
}
}

return(super.onOptionsItemSelected(item));
}

private void initPreview(int width, int height) {
if (camera != null && previewHolder.getSurface() != null) {
try {
camera.setPreviewDisplay(previewHolder);
}
catch (Throwable t) {
Log.e("PreviewDemo-surfaceCallback", "Exception in setPreviewDisplay()", t);
}

if (!cameraConfigured) {
Camera.Parameters parameters=camera.getParameters();
setCameraResolution(); //Leaving this method out for now
camera.setParameters(parameters);
cameraConfigured=true;
}

}
}

private void startPreview() {
camera.startPreview();
}

SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
initPreview(width, height);
startPreview();
}

public void surfaceDestroyed(SurfaceHolder holder) {
}
};

Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
//This part is no problem, I am able to write it to the file and use the data from the output of the camera
}
}

当我尝试进行新调用时出现问题,如您在 onCreate() 方法中所见,称为 testing();每当我调用测试方法(试图绕过按下按钮的需要)时,它都会出错。这是测试()代码:

private void testing() {
try{
cameraConfigured=true;
inPreview=true;
camera=Camera.open();
Camera.Parameters parameters=camera.getParameters();
setCameraResolution();
camera.setParameters(parameters);
camera.setPreviewDisplay(previewHolder);
startPreview();
camera.takePicture(null, null, photoCallback); //THIS IS WHERE THE PHOTO IS BEING TAKEN
} catch (Exception e) {
L.m(e.toString());
}
}

然后它出错了,具体说:java.lang.RuntimeException: 拍照失败

重申一下,当我单击一个图标/按钮时,它可以很好地拍照,我想要完成的是让它运行该代码而无需点击按钮/图标。我认为这是我所缺少的非常简单的东西,我似乎无法弄清楚。

最佳答案

SurfaceHolder.Callback#onSurfaceCreated 调用 testing()
:-)

关于java - 如何在 Android 中的 onCreate 方法而不是 onClick 中拍照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com