gpt4 book ai didi

Android Moto Droid 相机每次在拍照时都会挂起

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

总而言之,我一遍又一遍地在谷歌上搜索以找到解决方案,虽然我发现了一个关于相机释放等的错误,但我似乎无法让凸轮代码正常工作。每次我执行 takePicture 时,系统都会挂起,有时它会调用 PictureCallback,但大多数时候它只是挂起。

关于无法读取/data/ap_gain.bin 文件等的奇怪问题

代码如下:

public class CameraActivity extends Activity implements Camera.PictureCallback, RequestConstants {

private static final String TAG = "Camera";

private Preview preview;

private boolean previewRunning;

private int addressNotificationId;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addressNotificationId = getIntent().getIntExtra(REQ_RA_ID, 0);

getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

if (preview == null) {
preview = new Preview(this);
}
setContentView(preview);
}

@Override
protected void onDestroy() {
if (isFinishing()) {
preview.cleanup();
}

super.onDestroy();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_CAMERA) {

/*
preview.setDrawingCacheEnabled(true);
Bitmap ss = preview.getDrawingCache();
byte[] data = ImageUtility.getImageData(ss,75,1);
Log.v(TAG, "Pic with size: " + data.length);

ApplicationManager.getInstance().createPacketRecord(PacketConstants.PT_FLAG_ADDRESS_PHOTO, ApplicationDatabaseManager.getInstance().getRouteAddressBySystemId(addressNotificationId), data);
finish();
*/
preview.getCamera().takePicture(new Camera.ShutterCallback() {
@Override
public void onShutter() {

}
}, null, this);
return true;
}
return super.onKeyDown(keyCode, event);
}

@Override
public void onPictureTaken(byte[] data, Camera camera) {
/*
if (data == null || isFinishing())
return;

camera.stopPreview();
previewRunning = false;
camera.release();
*/
//Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,data.length);
//data = null;
//data = ImageUtility.getImageData(bitmap, 75,1);

Log.v(TAG, "Pic with size: " + data.length);


ApplicationManager.getInstance().createPacketRecord(PacketConstants.PT_FLAG_ADDRESS_PHOTO, ApplicationDatabaseManager.getInstance().getRouteAddressBySystemId(addressNotificationId), data);
finish();
}

}

class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;

Preview(Context context) {
super(context);

// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();

mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

Camera getCamera() {
return mCamera;
}

void cleanup() {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}

public void surfaceCreated(SurfaceHolder holder) {
if (mCamera == null)
mCamera = Camera.open();

try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}

public void surfaceDestroyed(SurfaceHolder holder) {

}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
parameters.setPictureSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
}

}

最佳答案

你有时拍照有时不拍照,因为你在回调发生之前释放相机。

当回调确实触发时,取决于相机是否已释放,它是否能够访问拍摄的照片。

我建议您在拍照时确保不要松开相机或关闭表单。

更好的是,从照片回调中关闭表单。

另外,当拍照时,android的默认 Action 是停止Preview。这不是错误,而是预期的性质。

关于Android Moto Droid 相机每次在拍照时都会挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021066/

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