我正在编写一个访问相机的程序。它工作了一段时间,但现在是Camera API抛出异常,因为当我尝试打开它时相机仍然在使用。我认为这是因为我在onPause,onResume和我使用它的地方没有正确处理它。这是我的代码:
@Override
protected void onResume(){
if (!getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
.show();
} else {
cameraId = findFrontFacingCamera();
if (cameraId < 0) {
Toast.makeText(this, "No front facing camera found.",
Toast.LENGTH_LONG).show();
} else {
try {
if (camera != null) {
camera.release();
camera = null;
}
camera = Camera.open(cameraId);
try {
camera.setPreviewTexture(cameraTexture);
}
catch(IOException e){
Log.i("CameraHome", "could not set camera preview");
}
}
catch (Exception e){
}
}
}
super.onResume();}
暂停:
@Override
public void onPause(){
stopLocationUpdates();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putLong("timeLeft", timeLeft);
editor.putBoolean("lockedOut", lockedOut);
editor.apply();
if (camera != null) {
camera.release();
camera = null;
}
super.onPause();
}
使用中:
//Take picture
camera.startPreview();
camera.takePicture(null, null,
new PhotoHandler(getApplicationContext()));
camera.stopPreview();
camera.release();
有什么想法我做错了吗?每次重新启动应用程序时,即使我启动默认的相机应用程序并关闭它,它也会抛出异常,说明相机正在使用中。
编辑:正在访问相机,但我的回调(PhotoHandler中的onPictureTaken)永远不会被调用,就好像图片没有被正确捕获一样。
答案 0 :(得分:0)
原来这个代码有效。必须卸载,重新启动并重新安装。然后我的onPictureTaken回调没有被调用。我相信这是因为我过早地打电话给stopPreview。我把它移到我的onPause并在takePicture调用后取消了释放调用。现在工作正常