Android集成Zxing
1.在build文件中添加依赖
dependencies {
//ZXing
implementation 'com.google.zxing:core:3.3.3'
implementation('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false }
2.之后只需要一行代码就可以调用扫码功能
new IntentIntegrator(this).initiateScan();
然后在当前的Activity中重写onActivityResult去获取结果就ok了
3.自定义扫码界面
因为扫码界面的代码非常少,所以可以新建一个Activity复制它的代码。
- 新建一个Activity
package com.onepilltest.index;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import com.onepilltest.R;
public class ZxingActivity extends AppCompatActivity {
private CaptureManager capture;
private DecoratedBarcodeView bv_barcode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(0xffffffff);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
setContentView(R.layout.zxing);
bv_barcode = (DecoratedBarcodeView) findViewById(R.id.bv_barcode);
capture = new CaptureManager(this, bv_barcode);
capture.initializeFromIntent(getIntent(), savedInstanceState);
capture.decode();
}
@Override
protected void onResume() {
super.onResume();
capture.onResume();
}
@Override
protected void onPause() {
super.onPause();
capture.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
capture.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
capture.onSaveInstanceState(outState);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
capture.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return bv_barcode.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);
}
}
- 然后是View
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity.ScanQRCodeActivity">
<com.journeyapps.barcodescanner.DecoratedBarcodeView
android:id="@+id/bv_barcode"
app:zxing_use_texture_view="false"
app:zxing_preview_scaling_strategy="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.constraint.ConstraintLayout>
其中DecoratedBarcodeView,它就是扫描界面的核心。
- 接下来更改跳转代码
new IntentIntegrator(this).setCaptureActivity(ScanQRCodeActivity.class).initiateScan();
上面的方法中多了一个setCaptureActivity()方法,这个方法看源码非常简单了,调用这个方法可以把默认的CaptureActivity替换为我们自定义的ScanQRCodeActivity。
- 重写onActivityResult()方法,获取返回的参数
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
Log.e("扫码结果分析", "Cancelled");
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
if (result.getContents() == null) {
Toast.makeText(this, "扫描结果为空", Toast.LENGTH_LONG).show();
} else {
String str = result.getContents();
Toast.makeText(this, str, Toast.LENGTH_LONG).show();
}
}
}
4.如果想停留在当前Activity
可以注释capture.decode();
然后添加
//回调
private BarcodeCallback barcodeCallback = new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
if (result != null){
Log.e(getClass().getName(), "获取到的扫描结果是:" + result.getText());
Toast.makeText(getApplicationContext(),result.getText(),Toast.LENGTH_SHORT).show();
textView.setText(result.getText());
}
}
@Override
public void possibleResultPoints(List<ResultPoint> resultPoints) {
}
};
然后再添加代码bv_barcode.decodeSingle(this.barcodeCallback);
设置回调函数。
5.如果想连续扫描
将代码替换
// bv_barcode.decodeSingle(this.barcodeCallback);//单次扫描
bv_barcode.decodeContinuous(barcodeCallback);//连续扫描
然后在回调方法和处理方法中添加以下分别调用以下函数
//回调
private BarcodeCallback barcodeCallback = new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
bv_barcode.resume();
if (result != null){
Log.e(getClass().getName(), "获取到的扫描结果是:" + result.getText());
String myresult = result.getText();
if (!results.equals(myresult)){
results = myresult;
Toast.makeText(getApplicationContext(),result.getText(),Toast.LENGTH_SHORT).show();
textView.setText(result.getText());
}
bv_barcode.resume();
}
}
参考:生成二维码和保存二维码
Android集成Zxing的更多相关文章
- 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境
[新手连载]一:使用Android Studio搭建Android集成开发环境http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87055&a ...
- 使用Android Studio搭建Android集成开发环境(图文教程)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 使用Android Studio搭建Android集成开发环境
有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...
- [置顶]
xamarin android使用zxing扫描二维码
好久没写了,这片文章篇幅不长,概述一下在xamarin android中用 ZXing.Net.Mobile库扫描二维码读取url的示例.扫码支付,扫码登录,App上各种各样的扫码,好像没个扫码的就有 ...
- Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境
有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...
- 搭建 Android 集成开发环境
在搭建 Android 集成开发环境之前,我想说的是,我们学习的目标是同时掌握移动开发三种方式:iOS开发.Android开发和Html5手机网页开发.由于iOS的开发工具是采用苹果官方的XCode, ...
- Android集成极光推送
要说学习极光推送,个人感觉官方文档就非常好啦,但是没法,人太懒啦,为了下次能够快速的将极光推送集成到项目中,故结合之前开发的项目和官方文档记录下简单的Android集成极光推送,在这之前,先上一张简单 ...
- android开发之集成zxing,二维码,以及扫描二维码的功能实现。带源代码下载
package cc.jiusansec.www; import com.google.zxing.WriterException; import com.zxing.activity.Capture ...
随机推荐
- 一种基于LQR使输出更加稳定的算法(超级实用)
已知: 令: 则: 以上三式成立 具体步骤: 状态量最后一行加入“上一时刻的控制量”: A,B根据上述方法变形: Q,R增加维度(控制量一般都为一个,此时R维度不变): 最关键的是——输出量已经变为“ ...
- Mariadb之日志相关配置
前面我们聊到了mariadb的事务,以及事务隔离级别,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13198186.html:今天我们来聊一聊mariadb的 ...
- 不同编程语言实现HelloWorld程序
目录 C C# C++ HTML Java Python C #include <stdio.h> int main() { printf("Hello World!" ...
- springboot 整合retry(重试机制)
当我们调用一个接口可能由于网络等原因造成第一次失败,再去尝试就成功了,这就是重试机制,spring支持重试机制,并且在Spring Cloud中可以与Hystaix结合使用,可以避免访问到已经不正常的 ...
- 【Oracle】表碎片重用规则
看完该篇文章你可以了解如下问题:表碎片是如何产生的,这些碎片能否重用? 数据库版本如下: SYS@zkm> select banner from v$version where rownum=1 ...
- 苹果手机history.back()返回不刷新问题
苹果手机,a页面打开b页面,b页面使用history.back(-1)返回a页面时,a页面不刷新,可在a页面添加以下代码: var isPageHide = false; window.addEven ...
- 查看windows操作系统的默认编码
转自:https://blog.csdn.net/zp357252539/article/details/79084480/ 在Windows平台下,进入DOS窗口,输入:chcp 可以得到操作系统的 ...
- scala 数据结构(六):映射 Map
1 映射 Map-基本介绍 Scala中的Map介绍 1) Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的, ...
- SQLAlchemy(一):SQLAlchemy去连接数据库、ORM介绍、将ORM模型映射到数据库中
SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到数据库中 目录 SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到 ...
- python 之 编码
本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有 ...