Android 超簡(jiǎn)易Zxing框架 生成二維碼+掃碼功能
zxing是一個(gè)二維碼的框架。
配置
1、

implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
如果報(bào)錯(cuò)在這個(gè)文件的android下加上如下配置,讓其支持Java1.8,不然只有1.7、1.6
(可在'app'右鍵---->open module settings------>Module看到)
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
2、

<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" /> <uses-permission android:name="android.permission.CAMERA"/>
記得點(diǎn)擊Sync Now
生成二維碼
步驟:
1、自定義一個(gè)負(fù)責(zé)生成二維碼的類,方便調(diào)用,返回一個(gè)Bitmap
要點(diǎn):利用Zxing中的 BarcodeEncoder 的 encodeBitmap方法
public Bitmap encodeBitmap(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints) throws WriterException
encodeBitmap方法
| 參數(shù) | 內(nèi)容 |
|---|---|
| contents | 碼的內(nèi)容 |
| format | 碼的類型(二維碼、條形碼…) |
| width | 碼的寬度 |
| height | 碼的高度 |
| hints | 碼的額外參數(shù) |
Map<EncodeHintType, ?> hints碼的額外參數(shù)
這里列舉了一些常用的
這些都是Zxing中定義好的
| 參數(shù) | 內(nèi)容 |
|---|---|
| EncodeHintType.ERROR_CORRECTION | 設(shè)置容錯(cuò)率 L>M>Q>H 等級(jí)越高掃描時(shí)間越長(zhǎng),準(zhǔn)確率越高 |
| EncodeHintType.CHARACTER_SET | 設(shè)置字符集 |
| EncodeHintType.MARGIN | 設(shè)置邊距 |
QRcode類
package com.example.xianyu;
import android.graphics.Bitmap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.journeyapps.barcodescanner.BarcodeEncoder;
import java.util.HashMap;
import java.util.Map;
public class QRcode{
public Bitmap qrcode(String content){
int width = 400;
int height = 400;
//HashMap設(shè)置二維碼參數(shù)
Map map = new HashMap();
// 設(shè)置容錯(cuò)率 L>M>Q>H 等級(jí)越高掃描時(shí)間越長(zhǎng),準(zhǔn)確率越高
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
//設(shè)置字符集
map.put(EncodeHintType.CHARACTER_SET,"utf-8");
//設(shè)置外邊距
map.put(EncodeHintType.MARGIN,1);
//利用編碼器,生成二維碼
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
Bitmap bitmap = null;
try {
bitmap = barcodeEncoder.encodeBitmap(content, BarcodeFormat.QR_CODE, width, height,map);
} catch (WriterException e) {
e.printStackTrace();
}
return bitmap;
}
}
2、在要生成二維碼的Activity,調(diào)用上述類,輸入二維碼內(nèi)容生成二維碼,之后顯示在ImageView組件上
MainActivity
public class MainActivity extends AppCompatActivity {
ImageView Code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Code = findViewById(R.id.iv_code);
QRcode qrcode = new QRcode();
Bitmap bitmap= qrcode.qrcode("CSDN");
Code.setImageBitmap(bitmap);
}
成功獲得二維碼內(nèi)容

掃碼
步驟:
1、給點(diǎn)擊掃碼的組件添加點(diǎn)擊監(jiān)聽(tīng)事件
2、在監(jiān)聽(tīng)事件中,利用Intent和startActivityForResult跳到Zxing定義好的默認(rèn)的掃碼界面CaptureActivity中(也可以自定義掃碼界面)
3、重寫(xiě)onActivityResult方法處理二維碼返回的內(nèi)容
要點(diǎn):
其中的REQUEST_CODEZxing是定義好的,一定要使用這個(gè)CODE
不然在onActivityResult方法中解析二維碼將會(huì)不起作用
IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
這段源碼可知REQUEST_CODE要相等才會(huì)進(jìn)行二維碼解析,否則將會(huì)返回 null
public static IntentResult parseActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE) {
return parseActivityResult(resultCode, intent);
}
return null;
}
設(shè)置監(jiān)聽(tīng):
Code.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent,REQUEST_CODE);
}
});
重寫(xiě)Activity中的onActivityResult得到二維碼內(nèi)容,我這里只是將獲得的內(nèi)容進(jìn)行簡(jiǎn)單的輸出
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
if(result.getContents() == null) {
Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
總結(jié)
更多內(nèi)容請(qǐng)到github查看:https://github.com/zxing/zxing
到此這篇關(guān)于Android 超簡(jiǎn)易Zxing框架 生成二維碼+掃碼功能的文章就介紹到這了,更多相關(guān)Android Zxing框架生成二維碼+掃碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android自定義控件實(shí)現(xiàn)方向盤(pán)效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)方向盤(pán)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
Android編程實(shí)現(xiàn)橫豎屏切換時(shí)不銷毀當(dāng)前activity和鎖定屏幕的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)橫豎屏切換時(shí)不銷毀當(dāng)前activity和鎖定屏幕的方法,涉及Android屬性設(shè)置及activity操作的相關(guān)技巧,需要的朋友可以參考下2015-11-11
Android自定義View 使用PathMeasure簡(jiǎn)單模仿系統(tǒng)ProgressBar(四)
這篇文章主要為大家詳細(xì)介紹了Android自定義View,使用PathMeasure簡(jiǎn)單模仿系統(tǒng)ProgressBar,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營(yíng)商的實(shí)現(xiàn)代碼
有時(shí)候我們需要在Android中獲取本機(jī)網(wǎng)絡(luò)提供商呢,這里簡(jiǎn)單分享下,方便需要的朋友2013-05-05
Android 中從屏幕左下角彈出Dialog動(dòng)畫(huà)效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 中從屏幕左下角彈出Dialog動(dòng)畫(huà)效果的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
Android 組件Gallery和GridView示例講解
本文主要講解Android 組件Gallery和GridView,這里詳細(xì)介紹組件Gallery和GridView的知識(shí)要點(diǎn),并附示例代碼和實(shí)現(xiàn)效果圖,有興趣的小伙伴可以參考下2016-08-08

