如何以编程方式在Android中启用Lollipop中的FlashLight

时间:2015-02-22 08:43:17

标签: android

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

以上剂量对Lollipop不起作用,因为在Lollipop中不推荐使用Camera。我无法找到任何其他方式在Lollipop中以编程方式打开Flash。我怎样才能做到这一点。提前致谢。

3 个答案:

答案 0 :(得分:7)

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" />

答案 1 :(得分:7)

现已弃用相机类。

  

对于上面的LOLLIPOP,你需要使用camera2 Api

因此,nickkadrov的解决方案可以为6.0&amp;在设备上方,打开/关闭闪光灯的最佳方法是尝试以下代码

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;

答案 2 :(得分:1)

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

<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的例子,因为我自己还没有使用它。