android - 如何以编程方式打开 Lollipop 中的 FlashLight Android

标签 android

Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

以上不适用于 Lollipop,因为 Camera 在 Lollipop 中已被弃用。我无法找到在 Lollipop 中以编程方式打开 Flash 的任何其他方法。我怎样才能做到这一点。提前致谢。

最佳答案

相机类现已弃用。

For LOLLIPOP above you need to use camera2 Api

所以 nickkadrov 的解决方案不适用于 6.0 及以上的设备,打开/关闭闪光灯的最佳方法是尝试下面的代码

public static void toggleFlashLight(){
    toggle=!toggle;
               try {
            CameraManager cameraManager = (CameraManager) getApplicationContext().getSystemService(Context.CAMERA_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                for (String id : cameraManager.getCameraIdList()) {

                    // Turn on the flash if camera has one
                    if (cameraManager.getCameraCharacteristics(id).get(CameraCharacteristics.FLASH_INFO_AVAILABLE)) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            cameraManager.setTorchMode(id, true);
                        }
                    }
                }
            }
        } catch (Exception e2) {
            Toast.makeText(getApplicationContext(), "Torch Failed: " + e2.getMessage(), Toast.LENGTH_SHORT).show();
        }


}

其中toggle是类级别的静态 bool 变量,默认值为false

static boolean toggle=false;

关于android - 如何以编程方式打开 Lollipop 中的 FlashLight Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656028/

相关文章:

Java GSON编码/解码复杂的类结构

java - 在共享首选项中保存 Intent

android - 将视频保存到 Android 的 MediaStore 时设置文件名和扩展名

java - 在LifecycleObserver中调用mainActivity的方法

java - 无法解决 Android 依赖关系

android - 引用库最近 SDK/Eclipse 更新异常

android.support.v7 与 `ActionBarActivity` 没有菜单显示

java - CountDownTimer 继续在后台滴答作响 — 如何在 onResume 中检索该计数?

java - AsyncTaskLoader 未启动

android - 有哪些可能的参数可以传递给 getNetworkInfo()