Android 在所有版本的 Android 上打开手电筒?

标签 android android-camera flashlight android-camera2

我一直在开发一款需要在 Android 手机上打开和关闭手电筒的应用。我需要一种方法来在 API 15 以上的所有 Android 版本上打开手电筒。问题是,在旧手机(API < 21)上,我必须使用传统方式(如下)。但是在较新的手机上,比如我的 Nexus 6P,我必须使用 Camera2 接口(interface)(下图)。有没有一种方法可以使用一组代码让手电筒在所有版本的 Android 上工作?

下面:

camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();

camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
// camera.release();  used later when app closes

在下面:

CameraManager cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
String cameraId = cameraManager.getCameraIdList()[0];
cameraManager.setTorchMode(cameraId, state);  // state is either true or false

最佳答案

一种可能的解决方案是在运行时对不同的sdk版本进行分段,以确定选择哪种方法:

    private final int sdkVersion = Build.VERSION.SDK_INT;

    if (sdkVersion < Build.VERSION_CODES.LOLLIPOP) {
        //do old way
    } else {
        //do new way
    }

更多信息在这里:How to support multiple android version in your code?

关于Android 在所有版本的 Android 上打开手电筒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38340774/

相关文章:

java - 安卓录像错误

android - 相机原生代码底层逻辑

ios - 随时间改变 iPhone 手电筒强度 (Swift)

java - 如何创建闪光灯和频闪效果。需要帮助来修复频闪效应

android - 频闪切换按钮打开时,从频闪 Activity 中按下后手电筒 Activity 崩溃

android - 使用 ActionBar 选项卡在 onCreateView 中获取 Google Map Fragment

java - 无法在Asynctask Android,java中调用View

android - 根据属性选择元素-缺少一些元素

android - 从安卓相机旋转图片

android - 未调用自定义适配器 getView() 方法