Zxing扫描二维码

文/orgwcl90(简书作者)
原文链接:http://www.jianshu.com/p/28006c6232c0

------------------------------------------------------------------------

 

想要在项目中实现扫描二维码功能就肯定得添加Zxing的第三方库,但是在导入中,需要修改很多内容。现在将网上找到的简单实现的方法作以记录,以便日后使用。

一、

只需在build.gradle文件中添加如下内容:

repositories{
    jcenter()
}

dependencies{
    compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
    compile 'com.google.zxing:core:3.2.0'
}

然后Gradle会自动编译代码并且导入到app中。

导入完成后就是使用了:

new IntentIntegrator(this).initiateScan();//'this' is the current Activity

在Fragment中使用:

IntentIntegrator.forFragment(this).initiateScan();//'this' is the current Fragment
//If you're using the support library, use IntentIntegrator.forSupportFragment(this) instead

自定义设置:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0); // Use a specific camera of the device
integrator.setBeepEnabel(false);
integrator.setBarcodeImageEnable(true);
integrator.initiateScan();

更多的设置

设置方向:

由于程序默认设置的横屏,对于大多数应用来说使用竖屏居多,因此在使用的时候需要做修改。

为了改变方向,需要创建一个新的Activity继承自CaptureActivity并且在AndroidManifest.xml文件中进行方向设置。

public class CaptureActivityAnyOrientation extends CaptureActivity{
}

<activity android:name=".CaptureActivityAnyOrientation"
    android:screenOrientation="fullSensor"
    android:stateNotNeeded="true"
    android:theme="@style/zxing_CaptureTheme"
    android:windowSoftInputMode="stateAlwaysHidden">
</activity>

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setCaptureActivity(CaptrueActivityAnyOrientation.class);
integrator.setOrientationLocked(false);
integrator.initiateScan();





### ZXing 扫描二维码失败的解决方案 ZXing 是一个功能强大的开源库,用于生成和扫描二维码。然而,在实际使用中可能会遇到扫描失败的问题。以下是一些常见的原因及解决方案: #### 1. 硬件问题 如果设备的摄像头存在问题,例如镜头脏污或硬件故障,可能导致扫描失败。确保摄像头清洁且正常工作[^2]。 #### 2. 光线不足 在光线较暗的环境下,二维码可能无法被正确识别。可以通过开启闪光灯来改善光线条件。代码示例如下: ```java public void IfOpenLight(View v) { ifOpenLight++; switch (ifOpenLight % 2) { case 0: CameraManager.get().closeLight(); // 关闭闪光灯 break; case 1: CameraManager.get().openLight(); // 开启闪光灯 break; default: break; } } ``` 通过上述代码实现闪光灯的开关功能[^3]。 #### 3. 图片质量问题 二维码图片可能存在模糊、损坏或分辨率过低等问题,导致无法被正确解析。建议确保二维码图片清晰且无干扰[^3]。 #### 4. 解码配置问题 ZXing 提供了多种解码配置选项。如果配置不当,可能会影响扫描结果。可以尝试调整 `Hints` 参数以优化解码过程。例如: ```java Hashtable<DecodeHintType, Object> hints = new Hashtable<>(); hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); // 尝试更努力地解码 hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); // 假设整个图像都是条形码 MultiFormatReader reader = new MultiFormatReader(); Result result = reader.decode(bitmapSource, hints); ``` 通过设置 `TRY_HARDER` 和 `PURE_BARCODE` 等参数,可以提高解码成功率[^1]。 #### 5. 版本兼容性问题 如果使用的 ZXing 版本较旧,可能存在兼容性问题。建议升级到最新版本(如 3.x),以获得更好的性能和修复已知问题。 #### 6. 用户界面问题 如果用户界面设计不合理,可能导致用户体验不佳,从而影响扫描成功率。例如,UI 界面过于复杂或不美观,可能让用户难以正确对准二维码。可以参考流行的扫码应用(如微信、QQ)进行界面优化。 #### 7. 扫描区域限制 默认情况下,ZXing扫描区域可能较小,导致部分二维码无法被完全覆盖。可以通过调整扫描区域大小来解决此问题。例如: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scan); // 设置扫描区域大小 Display display = getWindowManager().getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); Rect framingRect = new Rect(0, 0, screenWidth, screenHeight / 2); // 调整扫描区域为屏幕高度的一半 cameraManager.setFramingRect(framingRect); } ``` 通过上述代码调整扫描区域,确保二维码能够完全进入扫描范围[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值