【问题标题】:Turn On flashlight when camera is running相机运行时打开手电筒
【发布时间】: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);
}

我实际上希望能够从我的应用程序中激活手电筒和相机。

【问题讨论】:

标签: android android-camera2


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2019-12-10
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多