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方法
| 參數 | 內容 |
|---|---|
| contents | 碼的內容 |
| format | 碼的類型(二維碼、條形碼…) |
| width | 碼的寬度 |
| height | 碼的高度 |
| hints | 碼的額外參數 |
Map<EncodeHintType, ?> hints碼的額外參數
這里列舉了一些常用的
這些都是Zxing中定義好的
| 參數 | 內容 |
|---|---|
| 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設置二維碼參數
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中兩個類讓你再也不用實現onActivityResult()
這篇文章主要給大家介紹了關于Android中兩個類讓你再也不用實現onActivityResult()的相關資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友們下面來一起看看吧2018-08-08
Android開發(fā)實現自定義Toast、LayoutInflater使用其他布局示例
這篇文章主要介紹了Android開發(fā)實現自定義Toast、LayoutInflater使用其他布局,涉及Android自定義Toast與界面布局相關操作技巧,需要的朋友可以參考下2019-03-03
Android編程中沉浸式狀態(tài)欄的三種實現方式詳解
這篇文章主要介紹了Android編程中沉浸式狀態(tài)欄的三種實現方式,簡單描述了沉浸式狀態(tài)欄的概念、功能并結合實例形式詳細分析了Android實現沉浸式狀態(tài)欄的三種操作技巧與注意事項,需要的朋友可以參考下2018-02-02

