相机运行时打开手电筒

时间:2019-08-11 15:15:51

标签: android android-camera2

我想在摄像头运行时打开手电筒,但出现以下异常:

W/System.err: android.hardware.camera2.CameraAccessException: CAMERA_IN_USE (4): setTorchMode:1611: Torch for camera "0" is not available due to an existing camera user

当相机不运行时,我可以打开手电筒,但是当相机启动时,手电筒关闭,并且当我按应用程序中的按钮将其打开时,例外。

当我使用手电筒系统应用程序时,在相机运行时手电筒也会打开。

我能够创建一个打开手电筒的服务,并且该服务正在运行,但是同样,当相机运行时,我遇到了上述异常。

这是我的服务等级:

public class FlashLightService extends Service {
    private CameraManager camManager;
    private String cameraId;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        camManager = (CameraManager) 
    getSystemService(Context.CAMERA_SERVICE);
        try {
            cameraId = camManager.getCameraIdList()[0];
            Log.i("CAMERA HAS FLASH:",
                "" + camManager.getCameraCharacteristics(cameraId).get(CameraCharacteristics.FLASH_INFO_AVAILABLE));
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        try {
            Log.i("CAMERA TURN ON", "cameraId=" + cameraId);
            camManager.setTorchMode(cameraId, true);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        try {
            Log.i("CAMERA TURN OFF", "cameraId=" + cameraId);
            camManager.setTorchMode(cameraId, false);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
} 

以下是该活动的相关代码:

toggleFlashlightButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (isFlashOn) {
            setFlashOff();
        } else {
            setFlashOn();
        }
    }
});

private void setFlashOn() {
    isFlashOn = true;
    toggleFlashlightButton.setImageResource(R.drawable.flashlight_off);
    startService(flashLightService);
}

private void setFlashOff() {
    isFlashOn = false;
    toggleFlashlightButton.setImageResource(R.drawable.flashlight_on);
    stopService(flashLightService);
}

我实际上是希望能够从我的应用程序中同时激活闪光灯和相机。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我使用 JavaCameraView 解决了,并在第 171 行的方法 initializeCamera 中添加了这个 params.setFlashMode(params.FLASH_MODE_TORCH);

相关问题