如何以编程方式在 Lollipop Android 中打开 FlashLight
Posted
技术标签:
【中文标题】如何以编程方式在 Lollipop Android 中打开 FlashLight【英文标题】:How to turn on FlashLight in Lollipop programmatically Android 【发布时间】: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。我怎样才能做到这一点。提前致谢。
【问题讨论】:
【参考方案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 的示例,因为我自己还没有使用它。
【讨论】:
以上是关于如何以编程方式在 Lollipop Android 中打开 FlashLight的主要内容,如果未能解决你的问题,请参考以下文章
Android Lollipop 中的另一个通知正在取消通知
如何在视图内的特定位置触发 Android Lollipop 的涟漪效应,而不触发触摸事件?
即使在 Lollipop 之前,如何获取当前设备的用户列表?