Android 超簡易Zxing框架 生成二維碼+掃碼功能
zxing是一個二維碼的框架。
配置
1、

implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
如果報錯在這個文件的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"/>
記得點擊Sync Now
生成二維碼
步驟:
1、自定義一個負責生成二維碼的類,方便調用,返回一個Bitmap
要點:利用Zxing中的 BarcodeEncoder 的 encodeBitmap方法
public Bitmap encodeBitmap(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints) throws WriterException
encodeBitmap方法
| 參數(shù) | 內容 |
|---|---|
| contents | 碼的內容 |
| format | 碼的類型(二維碼、條形碼…) |
| width | 碼的寬度 |
| height | 碼的高度 |
| hints | 碼的額外參數(shù) |
Map<EncodeHintType, ?> hints碼的額外參數(shù)
這里列舉了一些常用的
這些都是Zxing中定義好的
| 參數(shù) | 內容 |
|---|---|
| EncodeHintType.ERROR_CORRECTION | 設置容錯率 L>M>Q>H 等級越高掃描時間越長,準確率越高 |
| EncodeHintType.CHARACTER_SET | 設置字符集 |
| EncodeHintType.MARGIN | 設置邊距 |
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ù)
Map map = new HashMap();
// 設置容錯率 L>M>Q>H 等級越高掃描時間越長,準確率越高
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
//設置字符集
map.put(EncodeHintType.CHARACTER_SET,"utf-8");
//設置外邊距
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,調用上述類,輸入二維碼內容生成二維碼,之后顯示在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);
}
成功獲得二維碼內容

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

