android 打开闪光灯
在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 打开闪光灯相关推荐
- camera打开闪光灯页面崩溃 android,Android打开闪光灯关键代码
在AndroidManifest中注册相应的权限: 打开闪光灯关键代码: Camera camera = Camera.open(); camera.startPreview(); paramete ...
- android 打开闪光灯,如何在Android中以编程方式打开前置闪光灯...
对于这个问题,你应该: >检查手电筒是否是 可用与否? >如果是,则关闭/打开 >如果没有,那么根据你的应用,你可以做任何事情 需要. 要检查设备中闪存的可用性: 您可以使用以下内容 ...
- android 打开闪光灯,Android 闪光灯的打开和关闭
网上的方法大部分只支持 6.0 以下的手机,于是写了个兼容 6.0 以上手机的工具类: class FlashUtils { companion object { fun get():FlashUti ...
- Android之打开闪光灯关键代码
在AndroidManifest中注册相应的权限: <uses-permission android:name="android.permission.FLASHLIGHT" ...
- android camera 闪光灯关闭,Android控制闪光灯的方法(打开与关闭)
本文实例讲述了Android控制闪光灯的方法.分享给大家供大家参考,具体如下: 最近想做一个手电筒,在网上搜到一点资料 首先闪光灯可以用android.hardware.camera来控制 1. 在M ...
- Android如何打开闪光灯
在android中打开闪光灯的方法有两种,一种是获取硬件服务,通过反射的方式来操作闪光灯.另外一种是获得Camera对象,通过设置Camera的参数来操作闪光灯.一下是一个操作闪光灯的工具类:实现了两 ...
- Android 调用系统API打开闪光灯
我们用的android手机现在基本上都支持闪光灯了,实现一个闪光灯的功能不是很难,就是其中会碰到一些奇葩的问题.我就碰到了一些问题,因为国产ROM的一些??,导致我们的闪光灯总是不能正常的打开.作为一 ...
- Android控制闪光灯的方法(打开与关闭)
Android移动端操作系统 Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发.尚未有统一中文名称, ...
- android自定义相机打开闪光灯,Android 照相机(闪光灯,切换摄像头)
1.开启关闭闪光灯 /** * 通过设置Camera打开闪光灯 */ public synchronized void turnLightOn() { if (camera == null) { re ...
最新文章
- Windows phone应从Android吸取四点教训
- 拷贝控制——拷贝控制和资源管理,交换操作,对象移动
- 平稳随机序列的自相关函数和功率谱密度
- javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性
- linux中时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
- 戳破“砖家”假面:唯快不破的时代,为什么这件事一定要慢慢做?
- 7-34 红色警报 (10 分)(结构体并查集)
- 如何使用Excel选择整列排序
- Educoder Basemap和seaborn 第三关:Basemap
- Facebook怎样开发软件:工程师驱动的文化
- 干货:怎么提高科技成果转移转化成效?
- 【附源码】Python计算机毕业设计民宿客房管理系统
- 基于kettle8的web端调度监控平台
- 部分手机虚拟键盘的适配问题
- html在抽奖图片自动效果图,jQuery实现图片随机切换、抽奖功能(实例代码)
- 计算机视觉论文-2021-07-15
- 发展心理学类毕业论文文献包含哪些?
- 计算机表格要学些什么,几个Excel表格的制作方法
- 新入职百度某员工发飙:前人代码写得像一坨屎,不能忍受,颠覆了对大厂的认知,...
- 10分钟部署一个别人可以访问的在线网站
热门文章
- 2023AIGC市场研究报告:ChatGPT的技术演进、变革风向与AIGC投资机会分析(附下载链接)...
- 成都榆熙电子商务有限公司:DSR评分对于店铺来说很重要吗?
- 魅族手机如何刷flyme国际版(跳过检查固件损坏这一步)
- FastDFS的Java客户端无法使用maven依赖和undefined for the type TrackerClient异常问题
- 双台笔记本之间的屏幕扩展
- 今天是2011年5月26日
- 青年体检(肿瘤筛查)
- 语音点击播放时的语音图标以及GIF动画效果图
- ISCC2014_Writeup
- 用VC实现洪水攻击程序