二维码快速扫码优化方案介绍(一)--怎么在光线不足时,手机自动进行补光。

二维码扫码已经是一个很通用的技术了,也有很多的开源项目可以实现,比如Zxing项目。https://github.com/zxing

这里重点不是介绍Zxing中是怎么样来实现二维码扫码的,而是来介绍一下,微信上的快速扫码技术是如何来做到优化体验的。

要实现在光线不足时,手机自动进行补光,其实很简单,每个人都知道,手机上有很多的传感器,其中有一个很重要的传感器就是光线传感器。

这个大家平时在拍照的时候,都用到过。那么如何能把这个应用到二维码的扫码体验上来呢。

我们可以利用手机的光线传感器进行外部光线感应,到光线很暗时,那么就可以自动进行补光了。这里我们以安卓手机为例,进行说明

在安卓手机中,我们定义一个Button和一个TextView,TextView用来显示从光线传感器中接收到的光线强度指数。Button按钮用于当光线较弱时,自动出来这个Button按钮,可以点击打开手机的闪光灯。当光线较强时,自动隐藏该Button按钮。

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"        android:layout_height="fill_parent" >.......
<Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="补光"    android:id="@+id/flashLightButton"    android:layout_centerVertical="true"    android:layout_centerHorizontal="true" />

<TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/ligthSensorView"    android:layout_below="@+id/flashLightButton"    android:layout_centerHorizontal="true"    android:layout_marginTop="92dp" />
</RelativeLayout></FrameLayout>在Activity中,我们定义一下上面的Button和TextView//补光Button
private Button flashLightButton;//显示出当前的光线强度
private TextView ligthSensorView;//光线传感器相关
private SensorManager sm;private Sensor ligthSensor;
flashLightButton  = (Button) findViewById(R.id.flashLightButton);ligthSensorView = (TextView) findViewById(R.id.ligthSensorView);//光线传感器使用注册
sm = (SensorManager) getSystemService(SENSOR_SERVICE);ligthSensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT);sm.registerListener(new MySensorListener(), ligthSensor, SensorManager.SENSOR_DELAY_NORMAL);//设置Button监听
flashLightButton.setOnClickListener(new flashLightListener());
//flashLightButton的监听实现
class flashLightListener implements View.OnClickListener{Boolean isopen = false;   @Override   public void onClick(View view) {      if(isopen){//关灯         CameraManager.get().closeFlashlight();         isopen = false;      }      else{//开灯         CameraManager.get().openFlashlight();         isopen = true;      }   }}//传感器监听
public class MySensorListener implements SensorEventListener {

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}
//获取光线的强度
public void onSensorChanged(SensorEvent event) {      //获取精度      float acc = event.accuracy;      //获取光线强度      float lux = event.values[0];      sb = "精度:"+acc+",光线强度:"+lux+"摄像头模式:";//光线强度展示在ligthSensorView上
      ligthSensorView.setText(sb);      int retval = Float.compare(lux, (float) 10.0);      if(retval>0){//光线强度>10.0隐藏Button         flashLightButton.setVisibility(View.INVISIBLE);      }      else {//显示Button         flashLightButton.setVisibility(View.VISIBLE);      }   }}
//通过camera的方式开启闪光灯public static void turnLightOnCamera(Camera mCamera) {    mCamera.startPreview();    Camera.Parameters parameters = mCamera.getParameters();    List<String> flashModes = parameters.getSupportedFlashModes();    String flashMode = parameters.getFlashMode();    if (!Camera.Parameters.FLASH_MODE_TORCH.equals(flashMode)) {        // 开启闪光灯        if (flashModes.contains(Camera.Parameters.FLASH_MODE_TORCH)) {            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);            mCamera.setParameters(parameters);            mCamera.startPreview();            isOpenFlash = true;        }    }}
//通过camera的方式关闭闪光灯public static void turnLightOffCamera(Camera mCamera) {    mCamera.stopPreview();    Camera.Parameters parameters = mCamera.getParameters();    List<String> flashModes = parameters.getSupportedFlashModes();    String flashMode = parameters.getFlashMode();    if (!Camera.Parameters.FLASH_MODE_OFF.equals(flashMode)) {        // 关闭闪光灯        if (flashModes.contains(Camera.Parameters.FLASH_MODE_OFF)) {            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);            mCamera.setParameters(parameters);        }    }    isOpenFlash = false;}
完成上面的优化后,那么我们扫码就有了进一步的体验优化了,可以根据光线的强弱来决定是否需要在扫码时,进行补光。
时间: 2024-11-02 21:38:36

二维码快速扫码优化方案介绍(一)--怎么在光线不足时,手机自动进行补光。的相关文章

HDU——1005Number Sequence(模版题 二维矩阵快速幂+操作符重载)

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 148003    Accepted Submission(s): 35976 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

扫码领红包精准营销活动方案

扫码领红包精准营销活动方案:151.1222.4001(微信同步)微信红包一直是人们所喜欢的,不管是拆红包时的悬念,还是即刻到账的喜悦,都让人们欲罢不能.而聪明的商家学会了迎合消费者的心理,但凡开业.店庆.五一.十一等节假日搞促销活动,基本上都离不开微信红包. 事实上,二维码红包促销已经很火爆了,可是有些商家还在纳闷:二维码红包到底是怎么做的?二维码红包促销为什么能实现精准营销?赢在移动负责人向记者详细讲解了这款爆红的二维码红包利器. 商家把二维码标签贴在商品外包装上,实现一件商品一个二维码.赢

饮料瓶盖二维码红包是怎样实现的?

瓶盖二维码红包开发,东鹏特饮瓶盖二维码,燕京啤酒扫瓶盖二维码红包营销方案,饮料瓶盖二维码红包 联系江经理:134-2106-8261. 饮料瓶盖二维码红包活动已经被广泛运用在各品牌饮料商.消费者购买打开瓶盖扫码就可以领取红包.如果你稍微留意一下,现在市场上几乎找不到不做开盖有奖的饮料产品.康师傅.统一.娃哈哈.葡萄适.和其正.霸王凉茶,当然,还有开盖有奖的"鼻祖"啤酒品牌--珠江.燕京等.正如一位业内人士所说,开盖有奖已经成为饮料销售的一个"标准". 案例一:三得利

二维码营销系统开发二维码营销系统模式详解

二维码营销系统开发(李想.185.6504.8478)二维码营销系统是什么?二维码营销系统有什么用?我为什么要需求购买二维码营销系统?二维码营销系统到底能给我带来解决什么问题?如果你想了解这些,那就跟随笔者一起往下看!市场营销是指,企业发现或挖掘准消费者需求,从整体氛围的营造以及自身产品形态的营造去推广和销售产品,主要是深挖产品的内涵,切合准消费者的需求,从而让消费者深刻了解该产品进而购买的过程.营销的目的是:产生可持续性收益.营销的本质是:抓住用户的需求,并快速把需求商品化.笔者下面介绍二维码

JS生成URL二维码

需求:项目中需要在UI界面有一个二维码,扫码后可以跳转到二维码包含的URL. 解决方案:在前端用js生成一个包含URL等信息的二维码. 实现: 方案一. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-T

带参数二维码的使用

带参数二维码的使用 最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我的开发过程比较详细的记录下,希望对大家有所帮助. 我本次开发使用的是认证服务号. 1 接入 首先进入微信公众号 -> 基本配置 下面是基本配置的页面,在URL中填写服务器地址,这个地址就是接受微信推送事件的一个接口,我是使用thinkPHP框架开发的程序,在其中一个Module

二维码生成与扫描

偶尔用这一块的东西,总是记不住,所以写了两个demo 注释写的非常详细. 二维码的生成: #import "ViewController.h" #import <CoreImage/CoreImage.h> @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *codeImage; @end /* 1. 生成二维码 要导入CoreImage 这个系统原生框架 (因为要去获

php微信开发之带参数二维码的使用

最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我的开发过程比较详细的记录下,希望对大家有所帮助. 我本次开发使用的是认证服务号. 1 接入首先进入微信公众号 -> 基本配置 下面是基本配置的页面,在URL中填写服务器地址,这个地址就是接受微信推送事件的一个接口,我是使用thinkPHP框架开发的程序,在其中一个Module(Decoration

c# 使用ZXing.dll库生成二维码

最近工作中有需要一个需求,就是把一个服务地址生成二维码,可以用来扫码分享,网上找了下方法也比较多,我这里po一下调用ZXing.dll库生成二维码的方法吧.先简单介绍一下 ZXing库,ZXing库是一个开源Java类库,可用于生成和解析多种格式的1D/2D条形码:zxing遵循Apache License 2.0,只是工具而已,是不收费哒. ZXing库的下载地址:http://zxingnet.codeplex.com/ 点击下载,下载后解压压缩包: 把Zxing加到工程应用中,以下为核心代