【发布时间】:2019-08-11 15:15:51
【问题描述】:
我想在相机运行时打开手电筒,但出现以下异常:
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);
}
我实际上希望能够从我的应用程序中激活手电筒和相机。
【问题讨论】:
-
谢谢,但这对我没有多大帮助,因为我既没有持有 Camera 对象,也没有持有 Capcure Session 对象。我正在使用以下 APPRTC 实现:github.com/androidthings/sample-videoRTC。有没有办法让手电筒与相机平行打开?