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复制它的代码。

  1. 新建一个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);
}
}
  1. 然后是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,它就是扫描界面的核心。

  1. 接下来更改跳转代码

    new IntentIntegrator(this).setCaptureActivity(ScanQRCodeActivity.class).initiateScan();

上面的方法中多了一个setCaptureActivity()方法,这个方法看源码非常简单了,调用这个方法可以把默认的CaptureActivity替换为我们自定义的ScanQRCodeActivity。

  1. 重写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();
}
}

参考:https://blog.csdn.net/asjqkkkk/article/details/80739613

参考:生成二维码和保存二维码

Android集成Zxing的更多相关文章

  1. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境

    [新手连载]一:使用Android Studio搭建Android集成开发环境http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87055&a ...

  3. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. 使用Android Studio搭建Android集成开发环境

    有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...

  5. [置顶] xamarin android使用zxing扫描二维码

    好久没写了,这片文章篇幅不长,概述一下在xamarin android中用 ZXing.Net.Mobile库扫描二维码读取url的示例.扫码支付,扫码登录,App上各种各样的扫码,好像没个扫码的就有 ...

  6. Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境

    有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...

  7. 搭建 Android 集成开发环境

    在搭建 Android 集成开发环境之前,我想说的是,我们学习的目标是同时掌握移动开发三种方式:iOS开发.Android开发和Html5手机网页开发.由于iOS的开发工具是采用苹果官方的XCode, ...

  8. Android集成极光推送

    要说学习极光推送,个人感觉官方文档就非常好啦,但是没法,人太懒啦,为了下次能够快速的将极光推送集成到项目中,故结合之前开发的项目和官方文档记录下简单的Android集成极光推送,在这之前,先上一张简单 ...

  9. android开发之集成zxing,二维码,以及扫描二维码的功能实现。带源代码下载

    package cc.jiusansec.www; import com.google.zxing.WriterException; import com.zxing.activity.Capture ...

随机推荐

  1. 语言模型 N-gram 与其平滑方法推导

    N-gram N-gram 作为一个名词表示的是一个给定文本/音频样本中有n项(音素,音节,字母,单词)的一个连续序列. 数学表达 N-gram 模型表示的是当前这个 word \(w_i\) 依赖于 ...

  2. 错误C2280 Union:尝试引用已删除的函数

    在编写Union共用体类型的时候,写了如下代码,在第5行出现错误: #include <iostream> #include <string> using namespace ...

  3. vue 生命周期钩子 路由钩子 动画钩子 执行顺序

    进入首页的钩子们 1 路由钩子 路由跳转前beforeEach 2 路由钩子 home组件内部:守卫执行前beforeRouteEnter 3.路由钩子 路由跳转后afterEach 4 生命周期 h ...

  4. Centos 下 Jenkins2.6 + Git + Maven Shell一件部署与备份

    使用Jenkins2.6 集成Maven与Git插件做持续集成,同时编写Shell脚本备份与发布(需要稍微知道点Linux/毕竟基于Centos PS:本人Linux也是菜鸡) - 下载Jenkins ...

  5. Zip破解工具Fcrackzip使用简介

    0x00 fcrackzip简单介绍 fcrackzip是一款专门破解zip类型压缩文件密码的工具,工具小巧方便.破解速度快,能使用字典和指定字符集破解,适用于linux.mac osx 系统 0x0 ...

  6. 重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 黎明前的坚守,的住吗? 有人举过这样一个例子,先给你张北大的录 ...

  7. VS插件 resharper安装破解教程

    https://masuit.com/20 ReSharper是一款由jetbrains开发的针对C#, VB.NET, ASP.NET, XML,和XAML的编辑器.沿袭了jetbrains开发工具 ...

  8. 反射修改 static final 变量

    一.测试结论 static final 修饰的基本类型和String类型不能通过反射修改; 二.测试案例 @Test public void test01() throws Exception { s ...

  9. 学习笔记三:基础篇Linux基础

    Linux基础 直接选择排序>快速排序>基数排序>归并排序 >堆排序>Shell排序>冒泡排序=冒泡排序2 =直接插入排序 一.Linux磁盘分区表示 Linux中 ...

  10. 查看sudo的history:配置sudolog

    sudo 权力很大,但责任更重大! We trust you have received the usual lecture from the local System Administrator. ...