在android中打开闪光灯的方法有两种,一种是获取硬件服务,通过反射的方式来操作闪光灯。另外一种是获得Camera对象,通过设置Camera的参数来操作闪光灯。一下是一个操作闪光灯的工具类:实现了两种方式操作闪光灯。通过switchFlashlight方法是通过反射的方式操作,通过turnLightOn,turnLightOff方法操作是通过设置Camera来操作闪关灯的。通过反射的方法貌似在4.0以上的版本中都不好用了,建议使用设置摄像头参数的方式来操作。
如果做扫描使用,可搭配zxing来使用;


import android.hardware.Camera;
import android.os.IBinder;
import android.util.Log;
import android.hardware.Camera.Parameters;import java.lang.reflect.Method;
import java.security.Policy;
import java.util.List;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. camera打开闪光灯页面崩溃 android,Android打开闪光灯关键代码

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

  2. android 打开闪光灯,如何在Android中以编程方式打开前置闪光灯...

    对于这个问题,你应该: >检查手电筒是否是 可用与否? >如果是,则关闭/打开 >如果没有,那么根据你的应用,你可以做任何事情 需要. 要检查设备中闪存的可用性: 您可以使用以下内容 ...

  3. android 打开闪光灯,Android 闪光灯的打开和关闭

    网上的方法大部分只支持 6.0 以下的手机,于是写了个兼容 6.0 以上手机的工具类: class FlashUtils { companion object { fun get():FlashUti ...

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

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

  5. android camera 闪光灯关闭,Android控制闪光灯的方法(打开与关闭)

    本文实例讲述了Android控制闪光灯的方法.分享给大家供大家参考,具体如下: 最近想做一个手电筒,在网上搜到一点资料 首先闪光灯可以用android.hardware.camera来控制 1. 在M ...

  6. Android如何打开闪光灯

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

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

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

  8. Android控制闪光灯的方法(打开与关闭)

    Android移动端操作系统 Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发.尚未有统一中文名称, ...

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

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

最新文章

  1. spoj2 Prime Generator
  2. 中科燕园GIS外包-----基于ArcGIS的应急平台
  3. CVPR 2018 《High-speed Tracking with Multi-kernel Correlation Filters》论文笔记
  4. 深入分析Php处理浮点数的问题
  5. SAP Fiori Elements 概述
  6. java压缩文件读取_用Java读取/写入压缩和非压缩文件
  7. java二分法排序算法_Java中使用二分法排序
  8. C++类的静态数据成员-关键字static
  9. .NetCore Session.Redis
  10. 第三方依赖关系的风险:利用数十个易受攻击的 NuGet包瞄准 .NET 平台
  11. python导入data数据_python实现从wind导入数据
  12. 用于函数优化的一维 (1D) 测试函数
  13. Spring Boot 2.x 切换 Servlet 嵌入式容器 Tomcat、Jetty、Undertow
  14. VS编译NPAPI:error C2733:不允许重载函数 “NP_Initialize的第二个参数
  15. hadoop2.2完全分布式最新高可靠安装文档
  16. php读取excel文件_php读取excel文件数据的导入和导出
  17. 仿9GAG制作过程(三)
  18. 计算机表格斜线怎么打字上去,excel表格斜杠怎么分割打字,表格画线怎么画斜线...
  19. 好消息!想入深户的伙伴们赶紧看过来!
  20. can口通信的软件测试,CAN网络一致性测试和UDS测试设备

热门文章

  1. weblogic集群配置(windows版)(转)
  2. 机器学习笔记(二十八):高斯核函数
  3. 老生常谈:微博,QQ,淘宝三种开放平台对比
  4. 正规理财app软件有哪些?top5资质正规理财app软件最新排名
  5. C语言编写生成无限长度的正/倒三角形
  6. python人工智能框架有哪些_前端人工智能框架有哪些?
  7. Elasticsearch 集群状态变成黄色或者红色,怎么办?
  8. “开源工业软件论坛”召开,澎峰科技受邀参加!
  9. 国产替代AD620, INA128, INA129,LT1167,LT6370
  10. idea 添加注释模板