在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. Windows phone应从Android吸取四点教训
  2. 拷贝控制——拷贝控制和资源管理,交换操作,对象移动
  3. 平稳随机序列的自相关函数和功率谱密度
  4. javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性
  5. linux中时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
  6. 戳破“砖家”假面:唯快不破的时代,为什么这件事一定要慢慢做?
  7. 7-34 红色警报 (10 分)(结构体并查集)
  8. 如何使用Excel选择整列排序
  9. Educoder Basemap和seaborn 第三关:Basemap
  10. Facebook怎样开发软件:工程师驱动的文化
  11. 干货:怎么提高科技成果转移转化成效?
  12. 【附源码】Python计算机毕业设计民宿客房管理系统
  13. 基于kettle8的web端调度监控平台
  14. 部分手机虚拟键盘的适配问题
  15. html在抽奖图片自动效果图,jQuery实现图片随机切换、抽奖功能(实例代码)
  16. 计算机视觉论文-2021-07-15
  17. 发展心理学类毕业论文文献包含哪些?
  18. 计算机表格要学些什么,几个Excel表格的制作方法
  19. 新入职百度某员工发飙:前人代码写得像一坨屎,不能忍受,颠覆了对大厂的认知,...
  20. 10分钟部署一个别人可以访问的在线网站

热门文章

  1. 2023AIGC市场研究报告:ChatGPT的技术演进、变革风向与AIGC投资机会分析(附下载链接)...
  2. 成都榆熙电子商务有限公司:DSR评分对于店铺来说很重要吗?
  3. 魅族手机如何刷flyme国际版(跳过检查固件损坏这一步)
  4. FastDFS的Java客户端无法使用maven依赖和undefined for the type TrackerClient异常问题
  5. 双台笔记本之间的屏幕扩展
  6. 今天是2011年5月26日
  7. 青年体检(肿瘤筛查)
  8. 语音点击播放时的语音图标以及GIF动画效果图
  9. ISCC2014_Writeup
  10. 用VC实现洪水攻击程序