在android中打开闪光灯的方法有两种,一种是获取硬件服务,通过反射的方式来操作闪光灯。另外一种是获得Camera对象,通过设置Camera的参数来操作闪光灯。一下是一个操作闪光灯的工具类:实现了两种方式操作闪光灯。通过switchFlashlight方法是通过反射的方式操作,通过turnLightOn,turnLightOff方法操作是通过设置Camera来操作闪关灯的。通过反射的方法貌似在4.0以上的版本中都不好用了,建议使用设置摄像头参数的方式来操作。
--------------------- 
原文:https://blog.csdn.net/mac_lim/article/details/8987377

public class FlashlightManager {private static final String TAG = FlashlightManager.class.getSimpleName();private static final Object iHardwareService;private static final Method setFlashEnabledMethod;static {iHardwareService = getHardwareService();setFlashEnabledMethod = getSetFlashEnabledMethod(iHardwareService);if (iHardwareService == null) {Log.v(TAG, "This device does supports control of a flashlight");} else {Log.v(TAG, "This device does not support control of a flashlight");}}private FlashlightManager() {}private static Object getHardwareService() {Class<?> serviceManagerClass = maybeForName("android.os.ServiceManager");if (serviceManagerClass == null) {return null;}Method getServiceMethod = maybeGetMethod(serviceManagerClass,"getService", String.class);if (getServiceMethod == null) {return null;}Object hardwareService = invoke(getServiceMethod, null, "hardware");if (hardwareService == null) {return null;}Class<?> iHardwareServiceStubClass = maybeForName("android.os.IHardwareService$Stub");if (iHardwareServiceStubClass == null) {return null;}Method asInterfaceMethod = maybeGetMethod(iHardwareServiceStubClass,"asInterface", IBinder.class);if (asInterfaceMethod == null) {return null;}return invoke(asInterfaceMethod, null, hardwareService);}private static Method getSetFlashEnabledMethod(Object iHardwareService) {if (iHardwareService == null) {return null;}Class<?> proxyClass = iHardwareService.getClass();return maybeGetMethod(proxyClass, "setFlashlightEnabled", boolean.class);}private static Class<?> maybeForName(String name) {try {return Class.forName(name);} catch (ClassNotFoundException cnfe) {// OKreturn null;} catch (Exception re) {re.printStackTrace();Log.w(TAG, "Unexpected error while finding class " + name, re);return null;}}/*** 通过设置Camera打开闪光灯* @param mCamera*/public static void turnLightOn(Camera mCamera) {if (mCamera == null) {return;}Parameters parameters = mCamera.getParameters();if (parameters == null) {return;}List<String> flashModes = parameters.getSupportedFlashModes();// Check if camera flash existsif (flashModes == null) {// Use the screen as a flashlight (next best thing)return;}String flashMode = parameters.getFlashMode();Log.i(TAG, "Flash mode: " + flashMode);Log.i(TAG, "Flash modes: " + flashModes);if (!Parameters.FLASH_MODE_TORCH.equals(flashMode)) {// Turn on the flashif (flashModes.contains(Parameters.FLASH_MODE_TORCH)) {parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);mCamera.setParameters(parameters);} else {}}}/*** 通过设置Camera关闭闪光灯* @param mCamera*/public static void turnLightOff(Camera mCamera) {if (mCamera == null) {return;}Parameters parameters = mCamera.getParameters();if (parameters == null) {return;}List<String> flashModes = parameters.getSupportedFlashModes();String flashMode = parameters.getFlashMode();// Check if camera flash existsif (flashModes == null) {return;}Log.i(TAG, "Flash mode: " + flashMode);Log.i(TAG, "Flash modes: " + flashModes);if (!Parameters.FLASH_MODE_OFF.equals(flashMode)) {// Turn off the flashif (flashModes.contains(Parameters.FLASH_MODE_OFF)) {parameters.setFlashMode(Parameters.FLASH_MODE_OFF);mCamera.setParameters(parameters);} else {Log.e(TAG, "FLASH_MODE_OFF not supported");}}}private static Method maybeGetMethod(Class<?> clazz, String name,Class<?>... argClasses) {try {return clazz.getMethod(name, argClasses);} catch (Exception nsme) {nsme.printStackTrace();// OKreturn null;}}private static Object invoke(Method method, Object instance, Object... args) {try {return method.invoke(instance, args);} catch (Exception e) {Log.w(TAG, "Unexpected error while invoking " + method, e);return null;}}/*** 通过反射来操作闪光灯* @param active*/public static void switchFlashlight(boolean active) {setFlashlight(active);}static void disableFlashlight() {setFlashlight(false);}private static void setFlashlight(boolean active) {if (iHardwareService != null) {invoke(setFlashEnabledMethod, iHardwareService, active);}}
}

Android如何打开闪光灯相关推荐

  1. Android之打开闪光灯关键代码

    在AndroidManifest中注册相应的权限: <uses-permission android:name="android.permission.FLASHLIGHT" ...

  2. android 打开闪光灯

    在android中打开闪光灯的方法有两种,一种是获取硬件服务,通过反射的方式来操作闪光灯.另外一种是获得Camera对象,通过设置Camera的参数来操作闪光灯.一下是一个操作闪光灯的工具类:实现了两 ...

  3. camera打开闪光灯页面崩溃 android,Android打开闪光灯关键代码

    在AndroidManifest中注册相应的权限: 打开闪光灯关键代码: Camera  camera = Camera.open(); camera.startPreview(); paramete ...

  4. Android 调用系统API打开闪光灯

    我们用的android手机现在基本上都支持闪光灯了,实现一个闪光灯的功能不是很难,就是其中会碰到一些奇葩的问题.我就碰到了一些问题,因为国产ROM的一些??,导致我们的闪光灯总是不能正常的打开.作为一 ...

  5. android自定义相机打开闪光灯,Android 照相机(闪光灯,切换摄像头)

    1.开启关闭闪光灯 /** * 通过设置Camera打开闪光灯 */ public synchronized void turnLightOn() { if (camera == null) { re ...

  6. android 7.0 打开闪光灯失效原因

    注意了.我说的是单独打开. 7.0以前打开闪光灯只要权限够了.直接调用 private void open2() {try {Log.e("~~~~~", "open2: ...

  7. camera2打开闪光灯的坑

    判断是否有闪光灯代码: Boolean flashAvailable = characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE) ...

  8. Android手电筒(闪光灯)

    百度google一下现有的关于手电筒(实际上是闪光灯控制)的设计和源代码都有很多. 例如 http://www.oschina.net/code/snippet_107931_17160 http:/ ...

  9. 开启android设备的闪光灯作为手电筒

    手电筒是使用Android手机的闪光灯,所以需添加权限<uses-permission android:name="android.permission.CAMERA" /& ...

最新文章

  1. 【看图识算法】这是你见过最简单的 “算法说明书”
  2. 速卖通2022新开店入驻流程及费用
  3. [label][转载][JavaSript]querySelectorAll 方法相比 getElementsBy 系列方法有什么区别?
  4. JVM—堆栈 堆 方法区 静态区 final static 内存分配
  5. HttpClient在.NET Core中的正确打开方式
  6. @ParameterizedTest在@CvsSource中具有空值
  7. VS2017无法启动
  8. 全视频沟通不再远 罗技为中国企业开启视频协作新格局
  9. ubuntu命令行下中文乱码的解决方案
  10. Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
  11. 寻找肇事汽车车牌号C语言,北京交通大学C语言综合程序的设计(黄宇班).doc
  12. 红耳朵象全国战略,让大众享受上门洗车的福利
  13. OneNET麒麟座应用开发之四:数据上传测试
  14. 电线线缆铜芯和铝芯有什么区别?哪个更好呢?
  15. Linux下四款常见远程工具比较
  16. BNN Pytorch代码阅读笔记
  17. 单叶双曲面母直线参数的几何意义
  18. 【office考试】Office办公软件考试试题题目
  19. [体感游戏]关于体感游戏的一些思考(一)--- 开篇和“随身”物件
  20. 21_余丙森_概论_2.3_2.4_泊松定理_一维连续r.v.及分布

热门文章

  1. YJL3400A,n沟道增强模式场效应晶体管的学习
  2. 如何把图片快速生成PDF?这个方法真不错!
  3. PMP每年考几次,费用如何?
  4. 金融系列3《锁卡指令》
  5. WeakMap弱引用
  6. 基于Springboot+mybatis+mysql+html图书管理系统2
  7. 猜灯谜_全排列板子题(A 村的元宵节灯会上有一迷题: 请猜谜 × 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。 请你用计算机按小明的思路算一下,然后)
  8. 华为应急通讯 迅驰C2 新版双网 原版GSMS软件六合一套装U盘版 ISO文件 百度网盘下载
  9. 【二】2D测量 Metrology——apply_metrology_model()算子
  10. 【python】摄氏温度和华氏温度转换