zBar扫描二维码时闪光灯自动打开问题

相信大家对zBar并不陌生,比较常用的扫描二维码和条形码的第三方库,在这不做过多解释。

我要说的是,有种场景我们在扫描二维码时,周围环境比较阴暗,光线不好,这个时候我们需要去开灯。这个时候的需求是我们如果能打开手机自带的闪光灯就好了。

到这一步并不难,网上也有很多关于打开手机闪光灯的代码,在这里我也贴出来一份:

<span style="font-size:14px;">- (void)openLight:(UIButton *)sender
{
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    NSError *error = nil;
    if ([captureDevice hasTorch])
    {
        BOOL locked = [captureDevice lockForConfiguration:&error];
        if (locked)
        {
            if (!isLight)
            {
                [captureDevice setTorchMode:AVCaptureTorchModeOn];
                isLight = YES;
            } else {
                [captureDevice setTorchMode:AVCaptureTorchModeOff];
                isLight = NO;
            }
            [captureDevice unlockForConfiguration];
        }
    }
}</span>

其中isLight是一个BOOL类型的全局变量,用来表示当前灯光是否是开启的,当然用captureDevice.torchMode ==
AVCaptureTorchModeOn来判断灯光否是开启也是可以的,这个根据具体需求来定了。

你以为到这就大功告成了吗?NO!我再测试的时候发现一个问题,在光线很好地情况下闪光灯的开关都没问题,但是环境比较暗光线不好的时候,闪光灯会自动打开!这个现象很莫名其妙,一开始以为是个bug,我还试图在viewDidLoad和viewDidAppear:方法中强制关闭闪光灯,但是都不起作用,经过多次测试,发现貌似这是zBar的一个特性,在光线比较暗的时候闪光灯自动打开了。。这让我很无语,那么该怎么解决呢?

经过翻看zBar库文件,找到ZBarReaderView的一个属性torchMode,经过测试,可以避免闪光灯自动打开的问题,代码修改如下:

<span style="font-size:14px;">- (void)openLight:(UIButton *)sender
{
    AVCaptureDevice *captureDevice = reader.device;
    NSError *error = nil;
    if ([captureDevice hasTorch])
    {
        BOOL locked = [captureDevice lockForConfiguration:&error];
        if (locked)
        {
            if (!isLight)
            {
                reader.torchMode = 1;
                [captureDevice setTorchMode:AVCaptureTorchModeOn];
                isLight = YES;
            } else {
                reader.torchMode = 0;
                [captureDevice setTorchMode:AVCaptureTorchModeOff];
                isLight = NO;
            }
            [captureDevice unlockForConfiguration];
        }
    }
}</span>

其中reader为ZBarReaderView的一个实例对象,通过修改reader的torchMode来精确实时的控制闪光灯开关。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-02 13:15:11

zBar扫描二维码时闪光灯自动打开问题的相关文章

在iOS中使用ZBar扫描二维码

最近在做的项目中需要用到二维码扫描功能,之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Android的SDK可供使用,最终我选择了ZBar进行二维码识别,它的注释清晰,便于使用. ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目

实现zbar扫描二维码的时候就把照片存储出来的办法

业务场景 当实现二维码扫描的时候(用的扫码库是zbar),有时候需要悄悄的整个扫描的照片存储下来,(charles有部分变态业务就是这样)就是说给扫描的图片照个全景照片. 那么代码如何实现的呢?我去StackoverFlow里终于找到了实现办法! protected PreviewCallback previewCb = new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { try { C

在iOS中使用ZBar扫描二维码和条形码

最近做了个外包项目,里面用到了二维码扫描和微信支付!之前比较熟悉的是ZXing,但是在Xcode7.1里面发现竟然莫名的不支持,木有办法,从网上查了一下还有一种支持二维码扫描的东西,没错就是接下来我要说的东东,二维码扫描的利器 ZBarSDK.闲言少絮叨,言归正传! 1.下载 ZBarSDK 官网 https://github.com/bmorton/ZBarSDK 2.导入如下框架 3.在AppDelegetem文件中#import "ZBarSDK.h" 并且 在 - (BOOL)

iOS中使用ZBar扫描二维码自定义扫描界面

之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Android的SDK可供使用,最终我选择了ZBar进行二维码识别,它的注释清晰,便于使用. ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目中我们更可能会使用第二种方式,这可以让我

在微信中,实现微信点击链接或者扫描二维码在浏览器中打开指定的链接

这个问题我查看了许多资料,最后总结一下: 我首先看了IOS端微信关于下载app的整个逻辑: 关于公众号里面关于微官网里面的app下载,如果你将你的应用中在微信开发平台认证过来,这个是要掏钱的:你点微官网app的下载,是可以直接跳到APP Store里面,检测这个应用是否已经下载,如果下载,直接打开: 而对于android 端,相比较IOS,就有更多方法,实现这个可能了. 1:微信开发平台认证,我要下载的链接,放在认证里面(不过不是单独的下载链接,你必须上传你的app到应用商城里面的下载地址):费

微信点击链接或者扫描二维码在浏览器中打开指定的链接

这个问题我查看了许多资料,最后总结一下: 我首先看了IOS端微信关于下载app的整个逻辑: 关于公众号里面关于微官网里面的app下载,如果你将你的应用中在微信开发平台认证过来,这个是要掏钱的:你点微官网app的下载,是可以直接跳到APP Store里面,检测这个应用是否已经下载,如果下载,直接打开: 而对于android 端,相比较IOS,就有更多方法,实现这个可能了. 1:微信开发平台认证,我要下载的链接,放在认证里面(不过不是单独的下载链接,你必须上传你的app到应用商城里面的下载地址):费

今天扫描二维码时出现一个奇葩错误:java.lang.SecurityException: Unab

后经多方查找,终于在stackoverflow中找到答案:http://stackoverflow.com/questions/18096607/using-crop-intent-getting-java-lang-securityexception-unable-to-find-app-for-ca 原文如下: This log means that your app is having trouble handling a communication intent. Sometimes p

手机扫描二维码下载APP,根据操作系统不同自动下载

Android和IOS手机扫描二维码下载APP,根据OS不同,自动处理相应下载操作.IOS自动跳转至AppStore应用下载页,Android自动下载应用的apk包. <script type="text/javascript"> $(function() { var ua = navigator.userAgent.toLowerCase(); if (/android/i.test(ua)){ //Android window.location.href = 'http

微信公众平台开发(2)扫描二维码添加公众账号

作者做过微信二维码和地理信息的程序,本章介绍一下获取二维码和处理用户扫描二维码的过程. 要想开通生成二维码api必须是认证的服务号,如果没有可以采用公众平台测试账号,地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 登陆后台的界面如图: 终于看到了传说中的appID,appsecret. 当微信用户扫描二维码时,实现两个功能: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者.