管理摄像机 - 无法访问摄像机

时间:2015-12-03 05:40:02

标签: android camera

我正在编写一个访问相机的程序。它工作了一段时间,但现在是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)永远不会被调用,就好像图片没有被正确捕获一样。

1 个答案:

答案 0 :(得分:0)

原来这个代码有效。必须卸载,重新启动并重新安装。然后我的onPictureTaken回调没有被调用。我相信这是因为我过早地打电话给stopPreview。我把它移到我的onPause并在takePicture调用后取消了释放调用。现在工作正常