我想在摄像头运行时打开手电筒,但出现以下异常:
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);
}
我实际上是希望能够从我的应用程序中同时激活闪光灯和相机。
答案 0 :(得分:0)
我遇到了类似的问题,我使用 JavaCameraView 解决了,并在第 171 行的方法 initializeCamera
中添加了这个 params.setFlashMode(params.FLASH_MODE_TORCH);