在所有 Android 台设备中控制手电筒

Controlling Flashlight in All Android devices

我正在使用相机包开发 android 应用程序来打开闪光灯,如下所示:

    Camera mCamera = Camera.open();
    List<String> flashModes = mCamera.getParameters().getSupportedFlashModes();
    if(flashModes != null && flashModes.contains(Parameters.FLASH_MODE_TORCH)){
        parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
        mCamera.setParameters(parameters);
    } else if (flashModes != null && flashModes.contains(Parameters.FLASH_MODE_ON)){
        parameters.setFlashMode(Parameters.FLASH_MODE_ON);
        mCamera.setParameters(parameters);
    }
    if(!previewing){
        mCamera.startPreview();
        previewing = true;
    }

检查支持的相机闪光灯模式,并进行调整。它适用于三星 Android 设备和其他一些设备,但不适用于 LG V20、LG V30 和 Mi Android。我搜索了这个并尝试了:

mCamera.autoFocus(Camera.AutoFocusCallback)
mCamera.setPreviewTexture(SurfaceTexture)

但没有任何效果。所以我为 api>23 使用了 Camera2 包,例如:

CameraManager mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
mCameraManager.setTorchMode("0", true);

它有效,但在三星设备中,会显示一条通知"Flashlight turned on",这很烦人。

所以,我需要一种方法来为所有带有 Camera 包的设备打开手电筒,或者不显示 "Flashlight turned on" 使用 Camera2 包的通知。

期待您的回复,谢谢。

下面的答案link救了我的命!

SurfaceView 对于某些设备来说是必不可少的。

LED flashlight on Galaxy Nexus controllable by what API?