Android中二维码的扫描与生成(zxing库)
家电修理 2023-07-16 19:17www.caominkang.com电器维修
目录
一.zxing是什么?
二.集成zxing框架
三.界面设计
四.二维码生成
五.二维码扫描
一.zxing是什么?
zxing是google推出的一个开源的二维码框架,可以实现使用手机的摄像头完成二维码的扫描和解码
二.集成zxing框架
1. 将获取的jar包复制到工程的app/libs目录下,刷新,然后去添加依赖
2. 集成java源码,将demo工程QrScan中app/src/main/java/目录下包中的zxing和util复制到此工程对应的app/src/main/java的包下
3. 修改package包名,修改import路径,修改类包名
4. 同步资源,复制资源目录
draablebtn_back.png flash_off.png flash_on.png
layout复制activity_capture.xml,activity_scanner.xml,toolbar_scanner.xml
ra全部复制
values复制 / 替换其中的attrs.xml,ids.xml,colors.xml
5.修改工具栏框架包和VieFinderVie包路径
6.打开开发权限,在清单文件中添加开发权限
7.运行一下工程,如果没报错的话就成功了
三.界面设计
activity_main.xml代码如下
<.google.android.material.appbar.AppBarLayout android:layout_idth="match_parent" android:layout_height="rap_content" android:theme="@style/AppTheme.AppBarOverlay"><.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" android:layout_idth="rap_content" android:layout_height="rap_content" android:layout_gravity="bottom|end" app:srcCompat="@android:draable/ic_dialog_email" />
content.xml代码如下
四.二维码生成
创建类CreateUtil,并编写createQRCode()方法来实现
public class CreateUtil {
//String codestring要生成二维码的字符串
// int idth二维码图片的宽度
// int height二维码图片的高度
public static Bitmap createQRCode(String codestring,int idth,int height){
try {
//判断参数的合法性,要求字符串内容不能为空或图片长宽必须大于0
if (TextUtils.isEmpty(codestring)||idth<=0||height<=0){
return null;
}
//设置二维码的相关参数,生成BitMatrix(位矩阵)对象
Hashtable hashtable=ne Hashtable<>();
hashtable.put(EncodeHintType.CHARACTER_SET,"utf-8"); //设置字符转码格式
hashtable.put(EncodeHintType.ERROR_CORRECTION,"H"); //设置容错级别
hashtable.put(EncodeHintType.MARGIN,"2"); //设置空白边距
//encode需要抛出和处理异常
BitMatrix bitMatrix=ne QRCodeWriter().encode(codestring, BarcodeFormat.QR_CODE,idth,height,hashtable);
//再创建像素数组,并根据位矩阵为数组元素赋颜色值
int[] pixel=ne int[idthidth];
for (int h=0;h
在MainActivity中编写代码——生成二维码
//点击开始生成按钮监听事件
startBt1.setOnClickListener(ne Vie.OnClickListener() {
@Override
public void onClick(Vie v) {
String input=inputEt.getText().toString(); //获取用户输入的字符串
//调用CreateUtil类生成二维码后显示在界面上
contentIv.setImageBitmap(CreateUtil.createQRCode(input,contentIv.getWidth(),contentIv.getHeight()));
}
});
五.二维码扫描
MainActivity中编写代码
//开始扫描按钮点击事件监听
startBt2.setOnClickListener(ne Vie.OnClickListener() {
@Override
public void onClick(Vie v) {
scanQRCode();
}
});
//实现扫描二维码的方法
private void scanQRCode() {
//申请相机权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, ne String[]{Manifest.permission.CAMERA}, Constant.REQ_PERM_CAMERA);
return;
}
//申请文件(相册)读写权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, ne String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Constant.REQ_PERM_EXTERNAL_STORAGE);
return;
}
//二维码扫码
//然后通过Intent机制启动zxing框架的CaptureActivity,请求返回结果
Intent intent = ne Intent(this, CaptureActivity.class);
startActivityForResult(intent, Constant.REQ_QR_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//扫描结果回调
if (requestCode == Constant.REQ_QR_CODE && resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
String scanResult = bundle.getString(Constant.INTENT_EXTRA_KEY_QR_SCAN);
//将扫描出的信息显示出来
resultTv.setText(scanResult);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
sitch (requestCode){
case Constant.REQ_PERM_CAMERA:
//摄像头权限申请
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//获得授权
scanQRCode();
} else {
//被禁止授权
Toast.makeText(this, "请至权限中心打开本应用的相机访问权限", Toast.LENGTH_LONG).sho();
}
break;
case Constant.REQ_PERM_EXTERNAL_STORAGE:
//文件读写权限申请
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//获得授权
scanQRCode();
} else {
//被禁止授权
Toast.makeText(this, "请至权限中心打开本应用的文件读写权限", Toast.LENGTH_LONG).sho();
}
break;
}
}
}
到此,一个简易的二维码生成与扫描就完成了
空调维修
- 我的世界电脑版运行身份怎么弄出来(我的世界
- 空调抽湿是什么意思,设置抽湿的温度有什么意
- 方太燃气灶有一个打不着火 怎么修复与排查方法
- 夏季免费清洗汽车空调的宣传口号
- 清洗完空调后出现漏水现象
- iphone6能玩什么游戏(iphone6游戏)
- 如何设置电脑密码锁屏(如何设置电脑密码锁屏
- win10删除开机密码提示不符合密码策略要求
- 电脑w7显示不是正版(w7不是正版怎么解决)
- 万家乐z8热水器显示e7解决 怎么修复与排查方法
- 1匹空调多少瓦数(1匹空调多少瓦)
- 安卓手机连接电脑用什么软件好(关于安卓手机
- 电脑网页看视频卡是什么原因(爱拍看视频卡)
- 华帝燃气灶点火器一直响然后熄火怎么办:问题
- 电脑壁纸怎么换(关于电脑壁纸怎么换的介绍)
- 冬天空调的出风口应该朝什么方向(冬天空调风