我们用的android手机现在基本上都支持闪光灯了,实现一个闪光灯的功能不是很难,就是其中会碰到一些奇葩的问题。我就碰到了一些问题,因为国产ROM的一些??,导致我们的闪光灯总是不能正常的打开。作为一个开发人员,首先要保证我们开发出来的产品是稳定的,不能说崩溃就崩溃了。
现在市面上的一些机型,当你打开闪光灯的时候再去打开相机,它会给予“”“相机被第三方占用,请先关闭第三方”之类的提示。但是呢,总有一些比较坑爹的Rom, 当你打开闪光灯了再去打开相机,系统相机会直接占用第三方的闪光灯,这就导致再去点击就会出现异常。
接下来说说我的解决方案,直接上源码

一般开启前先检查下闪光灯是否开启,开启了点击就关闭,反之亦然

/*    ** 是否开启了闪光灯* @return*/public boolean isFlashlightOn(boolean flag) {try {Camera.Parameters parameters = camera.getParameters();String flashMode = parameters.getFlashMode();if (flashMode.equals(android.hardware.Camera.Parameters.FLASH_MODE_TORCH)) {return true;} else {return false;}} catch (Exception e) {return false; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

写个工具方法,去操作

 /*** 闪光灯开关*/public void flashlightUtils() {if (isFlashlightOn(false)) {Closeshoudian();camera = null;} else {Openshoudian();}}

这是开启方法

public void Openshoudian() {//异常处理一定要加,否则Camera打开失败的话程序会崩溃try {Log.d("smile","camera打开");camera = Camera.open();} catch (Exception e) {Log.d("smile","Camera打开有问题");Toast.makeText(context, "Camera被占用,请先关闭", Toast.LENGTH_SHORT).show();}if(camera != null){//打开闪光灯camera.startPreview();Camera.Parameters parameter = camera.getParameters();parameter.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);camera.setParameters(parameter);Log.d("smile","闪光灯打开");}}

这是关闭方法

 public void Closeshoudian(){if (camera != null){//关闭闪光灯Log.d("smile", "closeCamera()");camera.getParameters().setFlashMode(Camera.Parameters.FLASH_MODE_OFF);camera.setParameters(camera.getParameters());camera.stopPreview();camera.release();camera = null;}}

这下不管怎么样,我们的程序都不会崩溃了,稳定第一。

Android 调用系统API打开闪光灯相关推荐

  1. Android 调用系统api录音的两种方式(MediaRecorder、AudioRecord)

    废话 权限.权限.权限,必须要先获取了录音权限,其他的事情晚点再说. 另外,新版本的Android 10系统会对录音有调整,引入了一个录音焦点的概念,也就是说以前的麦克风只能一个APP使用,必须要等它 ...

  2. android调用系统相册打开图片不显示,【报Bug】打开相册,不显示图片,选中图片后,app会崩溃...

    产品分类: uniapp/App PC开发环境操作系统: Mac PC开发环境操作系统版本号: 10 HBuilderX类型: 正式 HBuilderX版本号: 2.8.8 手机系统: Android ...

  3. Android调用系统应用打开各种类型文件

    1.建立匹配表 //建立一个文件类型与文件后缀名的匹配表private static final String[][] MATCH_ARRAY={//{后缀名, 文件类型}{".3gp&qu ...

  4. Android P+通过反射调用系统API实现高级功能

    Android P+通过反射调用系统API实现高级功能 1. 打开隐藏API 1.1 导入FreeReflection包 1.2 打开隐藏API 2. 反射系统服务并调用相应方法 通过反射调用系统AP ...

  5. android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法

    Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...

  6. Android调用系统的拍照,打开相册功能

    Android调用系统的拍照,打开相册功能 1 添加权限: <!-- 往SDCard写入数据权限 --> <uses-permission android:name="an ...

  7. Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享

    Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享 标签: Android系统分享QQ分享朋友圈图文分享 2016-09-27 22:54 279人阅读 评论(0) 收藏 举报 ...

  8. android 调用系统文件管理器

    今天,简单讲讲android如何调用系统的文件管理器获取目录下的文件资源. 这几天,还是因为搬家的事,导致自己状态很差.和领导说想要辞职,领导说还是先适应一下在说.所以还是坚持了. 这个其实也很简单, ...

  9. android 默认浏览器 视频播放 二维码,Android调用系统默认浏览器访问的方法

    一.启动android默认浏览器 这样子,android就可以调用起手机默认的浏览器访问. 二.指定相应的浏览器访问 1.指定android自带的浏览器访问 ( "com.android.b ...

最新文章

  1. Nginx面试!mysql时间类型以及获取当前时间,干货满满
  2. HTML DOM 方法
  3. 如何实现手游app瘦身?
  4. 管道符和作业控制 shell变量 环境变量配置文件
  5. C语言以数据块的形式读写文件
  6. MFC m_pMainWnd
  7. UltraEdit for Mac
  8. Nginx——Nginx实现服务端集群搭建
  9. 最新版O泡易支付系统平台 PHP源码 第三方第四方免签支付平台系统 全开源可二开
  10. 在linux系统下观看和转码m3u8视频文件
  11. java jws-_java JWS 应用及实践
  12. 一键脚本搭建docker redis 集群(cluster)
  13. BLV脉动阵列实现矩阵SVD分解
  14. element-ui表格中表头表内容的居中左右对齐
  15. 什么是交换?路由?路由交换?
  16. PyCharm安装教程最新版(社区版)
  17. 传输线理论基础01——相关定义、信号速率、分布参数与电报方程
  18. 1.关于嵌入式开发软件工程师的理解
  19. 小程序分类功能的实现
  20. oracle rac v3500_OEL6.X IBM v3500存储多路径配置

热门文章

  1. 华为双点双向路由引入
  2. 一个优秀的Java高级程序员应该读过哪些书(30本优秀书籍推荐)
  3. 12. Servlet 页面点击计数器
  4. 关于完全卸载Office的一些记录
  5. 拼团列表item自动滚动+倒计时实现
  6. 机器人参数化建模与仿真,软体机器人
  7. maven公共仓库地址
  8. POJ1222熄灯问题(枚举练习题)
  9. css实现阮一峰博客的进度条
  10. y51.第三章 Kubernetes从入门到精通 -- k8s实战案例(二四)