安卓框架之二维码框架zxing的快速上手
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,在清单文件里进行配置。
修改新的Activity布局文件,是二维码的背景布局
技术点:启动id为fl_my_container的FrameLayout就是我们需要替换的扫描组件,也就是说我们
会将我们定义的扫描Fragment替换到id为fl_my_container的FrameLayout的位置。
而上面的button是我们添加的一个额外的控件,在这里你可以添加任意的控件,各种UI效果等。
- 创建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的快速上手相关推荐
- 开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二)
开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二) 下面我们做一个ZXing扫描二维码的例子,是通过安卓库的方式引用ZXing应用代码. 开发步骤 建立一个安卓工程(Project) ...
- 生成和扫描二维码(ZXing库)
生成和扫描二维码(ZXing库) 一.ZXing概述 ZXing是谷歌自己推出的一个开源源码的二维码框架,可以实现使用手机的摄像头完成条形码的扫描和解码. 二.整合ZXing框架 将预先获取的core ...
- iOS和安卓共用同一个二维码实现跳转下载链接
最近看到一篇文章介绍如何实现,ios和android 使用同一个二维码自动实现跳转下载链接:最近公司项目正好也遇到了同样需求,在此笔记一下: 希望iOS和安卓使用一个二维码,让扫描的机器自己识别操作系 ...
- 安卓手机扫二维码从FTP服务器下载apk
安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...
- 技术解读 一维码,二维码,zxing
一维码,二维码,zxing 什么是一维码.二维码?一维码就是商品包装盒上的条形码,例如:书本后面的条形码,在真维斯或者其他等品牌店的衣服标签上都可以看到,一维码的应用已经很广泛了:而二维码就是.... ...
- 鸿蒙二维码开发Zxing
鸿蒙二维码开发Zxing 一,概述 鸿蒙中目前选用开源三方库Zxing进行二次封装开发来完成二维码扫描和生成,Zxing目前已经相当的成熟和稳定,是纯Java库,所以可以直接在鸿蒙工程中引用. 首先简 ...
- Java简单的生成/解析二维码(zxing qrcode)
Hi I'm Shendi Java简单的生成/解析二维码(zxing qrcode) 在之前使用 qrcode.js 方式生成二维码,但在不同设备上难免会有一些兼容问题,于是改为后端(Java)生成 ...
- Unity二维码插件 ZXing
1.二维码常见的生成与识别途径 1.草料二维码 https://cli.im/text 2.在软件中实现生成和扫描二维码 使用zxing实现 zxing是一个用java写的开源项目,zxing.net ...
- 二维码框架Zxing的使用及自定义
项目需要一个二维码扫描功能 关于二维码的扫描,我之前就听说过ZXing了(虽然从来没用过) 所以既然这次要用它了,自然是得搜索一番资料咯. 在开始介绍之前,我先说一下我的使用情况吧,网上的博客里面基本 ...
最新文章
- Faster R-CNN教程
- Live Messenger 邀请,再次放送
- 前端学习(3302):类组件父组件和子组件createRef
- 删除data.frame中具有全部或部分NA(缺失值)的行
- Tomcat--安装与部署(一)
- .net和java 性能_C++, C# 和 Java 性能比较
- HTML5 - 搭建移动Web应用
- 5W1H分析法和5W2H分析法
- matlab 集群搭建,MATLAB 科学计算工作站及集群配置方案
- Ashen的成长,从CSDN博客开始!
- 【Unity】Unity中的异步编程技术详解
- 软件定义闪存: SSD加速企业数据中心变革
- 【转】好资料,非常棒!!!
- 河北金融计算机网络基础在线6.1.3,2016秋大学计算机基础(河北金融学院)
- 2013年8月22日 量产量产 UDU+B+部署详细教程,专事bios启动
- Android动画-Animation原理解析
- 没有重复的数据在insert 时:ORA-00001:违反唯一约束条件
- Vue.use()详解
- 学java对笔记本配置有何要求_java程序员应该配置什么样的笔记本
- 优必选服务机器人自然语言处理技术
热门文章
- RGB、YUV、HSV和HSL区别和关联
- 情书的写作格式及内容
- 9.3(2)海洋之心
- jquery实现酷炫的抽奖器效果
- 2018开发最快的Webapp框架--BUI交互框架 1
- 华为手表使用自制表盘
- 超裂都市一直连不上服务器,超猎都市进不去 超猎都市打不开怎么办?[多图]
- 计算机二级考试报名发票,从业资格考试报名
- ES6_04- 模板字符串+标签模板字符串
- Python 3.X | 一文看懂不懵圈:位置参数(必选参数)、默认参数、可变参数、关键字参数、形参、实参...