Zxing的使用

导入依赖:

compile 'cn.yipianfengye.android:zxing-library:2.2'

申请权限:

<!--震动权限--><uses-permission android:name="android.permission.VIBRATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--照相机权限--><uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" /> <!-- 使用照相机权限 --><uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自动聚焦权限 -->

如果是Android6.0以上版本进行动态申请权限

String[] permissions=new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {requestPermissions(permissions,PERMS_REQUEST_CODE);}

第一步操作为初始化:

ZXingLibrary.initDisplayOpinion(this);

通过intent进行简单扫描:

 //设置进行扫描二维码
Intent intent = new Intent();
intent.setClass(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent,REQUEST);

或者使用手机图片进行扫描

//进行跳转到图片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_IMAGE);

简单扫描结果进行处理:

if(requestCode == 1){//进行简单扫描//获取数据if(data != null){Bundle bundle = data.getExtras();//判断bundle中存储的数据是否代表解析成功if(bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS){//获取解析结果String result = bundle.getString(CodeUtils.RESULT_STRING);Toast.makeText(MainActivity.this,"解析结果"+result,Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();}}}

图库中图片二维码处理结果:

public static String deCodeQR(Bitmap bitmap) {int width = bitmap.getWidth();int height = bitmap.getHeight();int[] pixels = new int[width * height];bitmap.getPixels(pixels, 0, width, 0, 0, width, height);RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));Result result = null;QRCodeReader reader = new QRCodeReader();try {result = reader.decode(binaryBitmap);} catch (NotFoundException e) {e.printStackTrace();} catch (ChecksumException e) {e.printStackTrace();} catch (FormatException e) {e.printStackTrace();}if(result == null || result.equals("")){return "解析结果失败";}return result.getText();
}

进行获取扫描数据:

if(requestCode == 2){//进行图片扫描if(data != null){//获取UriUri uri = data.getData();ContentResolver contentResolver = getContentResolver();try {Bitmap bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri);//获取对应的Bitmap图片//解析bitmap二维码图片String s = deCodeQR(bitmap);Toast.makeText(this,s,Toast.LENGTH_SHORT).show();} catch (IOException e) {e.printStackTrace();}}
}

设置自定义布局来进行扫描二维码:

两个布局文件如下:

1.在values的colors文件下添加颜色,决定了二维码四个边框的颜色

#0effc22.
2.在drawable文件下添加一个scan_image.png的图片,就是二维码扫描的那条横线

3.创建一个新的Activity(demo里叫 SecondActivity )集成FragmentActivity,在清单文件里进行配置。

  1. 修改新的Activity布局文件,是二维码的背景布局

  2. 技术点:启动id为fl_my_container的FrameLayout就是我们需要替换的扫描组件,也就是说我们

会将我们定义的扫描Fragment替换到id为fl_my_container的FrameLayout的位置。

而上面的button是我们添加的一个额外的控件,在这里你可以添加任意的控件,各种UI效果等。

  1. 创建my_camera.xml布局文件,这个就是扫描二维码的界面

要自定义二维码扫描页面,就在这个布局里进行修改,这里我加了一个ToolBar,一个Button按钮

用来退出扫描。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_second"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/second_button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|center_horizontal"android:layout_marginBottom="10dp"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:layout_marginTop="20dp"android:text="取消二维码扫描" /><FrameLayoutandroid:id="@+id/fl_my_container"android:layout_width="match_parent"android:layout_height="match_parent"></FrameLayout>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="fill_parent"android:layout_height="fill_parent"><SurfaceViewandroid:id="@+id/preview_view"android:layout_width="wrap_content"android:layout_height="wrap_content" /><com.uuzuche.lib_zxing.view.ViewfinderViewandroid:id="@+id/viewfinder_view"android:layout_width="wrap_content"android:layout_height="wrap_content"app:inner_corner_length="30dp"app:inner_corner_width="5dp"app:inner_height="200dp"app:inner_margintop="150dp"app:inner_scan_iscircle="false"app:inner_scan_speed="10"app:inner_width="200dp" />
</FrameLayout>

SecondActivity文件(代替CaptureActivity.java)

package com.it.zxing;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;import com.uuzuche.lib_zxing.activity.CaptureFragment;
import com.uuzuche.lib_zxing.activity.CodeUtils;public class SecondActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment);CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() {@Overridepublic void onAnalyzeSuccess(Bitmap mBitmap, String result) {Intent resultIntent = new Intent();Bundle bundle = new Bundle();bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS);bundle.putString(CodeUtils.RESULT_STRING, result);resultIntent.putExtras(bundle);SecondActivity.this.setResult(RESULT_OK, resultIntent);SecondActivity.this.finish();}@Overridepublic void onAnalyzeFailed() {Intent resultIntent = new Intent();Bundle bundle = new Bundle();bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED);bundle.putString(CodeUtils.RESULT_STRING, "");resultIntent.putExtras(bundle);SecondActivity.this.setResult(RESULT_OK, resultIntent);SecondActivity.this.finish();}};//在Activity中执行Fragment的初始化操作//执行扫面Fragment的初始化操作CaptureFragment captureFragment = new CaptureFragment();// 为二维码扫描界面设置定制化界面CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera);captureFragment.setAnalyzeCallback(analyzeCallback);getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();//进行展示}
}

生成二维码图片(不带logo)

button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String textContent = editText.getText().toString();if (TextUtils.isEmpty(textContent)) {Toast.makeText(ThreeActivity.this, "您的输入为空!", Toast.LENGTH_SHORT).show();return;}editText.setText("");mBitmap = CodeUtils.createImage(textContent, 400, 400, null);imageView.setImageBitmap(mBitmap);}
});

安卓框架之二维码框架zxing的快速上手相关推荐

  1. 开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二)

    开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二) 下面我们做一个ZXing扫描二维码的例子,是通过安卓库的方式引用ZXing应用代码. 开发步骤 建立一个安卓工程(Project) ...

  2. 生成和扫描二维码(ZXing库)

    生成和扫描二维码(ZXing库) 一.ZXing概述 ZXing是谷歌自己推出的一个开源源码的二维码框架,可以实现使用手机的摄像头完成条形码的扫描和解码. 二.整合ZXing框架 将预先获取的core ...

  3. iOS和安卓共用同一个二维码实现跳转下载链接

    最近看到一篇文章介绍如何实现,ios和android 使用同一个二维码自动实现跳转下载链接:最近公司项目正好也遇到了同样需求,在此笔记一下: 希望iOS和安卓使用一个二维码,让扫描的机器自己识别操作系 ...

  4. 安卓手机扫二维码从FTP服务器下载apk

    安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...

  5. 技术解读 一维码,二维码,zxing

    一维码,二维码,zxing 什么是一维码.二维码?一维码就是商品包装盒上的条形码,例如:书本后面的条形码,在真维斯或者其他等品牌店的衣服标签上都可以看到,一维码的应用已经很广泛了:而二维码就是.... ...

  6. 鸿蒙二维码开发Zxing

    鸿蒙二维码开发Zxing 一,概述 鸿蒙中目前选用开源三方库Zxing进行二次封装开发来完成二维码扫描和生成,Zxing目前已经相当的成熟和稳定,是纯Java库,所以可以直接在鸿蒙工程中引用. 首先简 ...

  7. Java简单的生成/解析二维码(zxing qrcode)

    Hi I'm Shendi Java简单的生成/解析二维码(zxing qrcode) 在之前使用 qrcode.js 方式生成二维码,但在不同设备上难免会有一些兼容问题,于是改为后端(Java)生成 ...

  8. Unity二维码插件 ZXing

    1.二维码常见的生成与识别途径 1.草料二维码 https://cli.im/text 2.在软件中实现生成和扫描二维码 使用zxing实现 zxing是一个用java写的开源项目,zxing.net ...

  9. 二维码框架Zxing的使用及自定义

    项目需要一个二维码扫描功能 关于二维码的扫描,我之前就听说过ZXing了(虽然从来没用过) 所以既然这次要用它了,自然是得搜索一番资料咯. 在开始介绍之前,我先说一下我的使用情况吧,网上的博客里面基本 ...

最新文章

  1. Faster R-CNN教程
  2. Live Messenger 邀请,再次放送
  3. 前端学习(3302):类组件父组件和子组件createRef
  4. 删除data.frame中具有全部或部分NA(缺失值)的行
  5. Tomcat--安装与部署(一)
  6. .net和java 性能_C++, C# 和 Java 性能比较
  7. HTML5 - 搭建移动Web应用
  8. 5W1H分析法和5W2H分析法
  9. matlab 集群搭建,MATLAB 科学计算工作站及集群配置方案
  10. Ashen的成长,从CSDN博客开始!
  11. 【Unity】Unity中的异步编程技术详解
  12. 软件定义闪存: SSD加速企业数据中心变革
  13. 【转】好资料,非常棒!!!
  14. 河北金融计算机网络基础在线6.1.3,2016秋大学计算机基础(河北金融学院)
  15. 2013年8月22日 量产量产 UDU+B+部署详细教程,专事bios启动
  16. Android动画-Animation原理解析
  17. 没有重复的数据在insert 时:ORA-00001:违反唯一约束条件
  18. Vue.use()详解
  19. 学java对笔记本配置有何要求_java程序员应该配置什么样的笔记本
  20. 优必选服务机器人自然语言处理技术

热门文章

  1. RGB、YUV、HSV和HSL区别和关联
  2. 情书的写作格式及内容
  3. 9.3(2)海洋之心
  4. jquery实现酷炫的抽奖器效果
  5. 2018开发最快的Webapp框架--BUI交互框架 1
  6. 华为手表使用自制表盘
  7. 超裂都市一直连不上服务器,超猎都市进不去 超猎都市打不开怎么办?[多图]
  8. 计算机二级考试报名发票,从业资格考试报名
  9. ES6_04- 模板字符串+标签模板字符串
  10. Python 3.X | 一文看懂不懵圈:位置参数(必选参数)、默认参数、可变参数、关键字参数、形参、实参...