【问题标题】:How to turn on FlashLight in Lollipop programmatically Android如何以编程方式在 Lollipop Android 中打开 FlashLight
【发布时间】:2015-04-23 17:29:11
【问题描述】:
Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

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

【问题讨论】:

    标签: android


    【解决方案1】:

    Camera 类现已弃用。

    对于上面的 LOLLIPOP,你需要使用 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 是类级别的静态布尔变量,默认值为 false

    static boolean toggle=false;
    

    【讨论】:

    • 权限真的有必要吗?在我的设备上它也可以不使用。
    • 您的代码需要 API23,实际上是 Android 6.0。
    【解决方案2】:
    mCam = Camera.open();
    Camera.Parameters p = mCam.getParameters();
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    mCam.setParameters(p);
    mPreviewTexture = new SurfaceTexture(0);
    try {
       mCam.setPreviewTexture(mPreviewTexture);
    } catch (IOException ex) {
       // Ignore
    }
    mCam.startPreview();
    

    它适用于 Android 5.0.x。并且不要忘记在清单中添加相机使用权限。

    <uses-permission android:name="android.permission.CAMERA" />
    

    【讨论】:

    • 相机类现已弃用。你知道做同样事情的任何替代方法吗?
    • SDK > 21 时弃用
    【解决方案3】:

    您的代码应该可以正常工作。请检查您是否添加了正确使用相机的权限:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT"/>
    

    这应该添加到您的其他规范之上的 AndroidManifest 中。

    此外,还有一个关于不同设备的有趣讨论和一个适用于每个设备的示例:Flashlight in Android

    如果您不想使用已弃用的 API,可以查看:

    Package Summary of Camera2

    Camera device specification on the new api

    很遗憾,我无法为您提供使用新 API 的示例,因为我自己还没有使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多