之前我寫過一篇部落格是關于如何将zxing內建到Android Studio中,以及簡單的實作掃一掃功能。
詳情請看:Android Studio內建Zxing掃一掃
但是,上面那篇部落格隻有有一個掃一掃功能,而且在低分辨率手機上會出現變形的問題。掃描速度也比較慢,功能不是很全,沒有閃光燈,生成二維碼,解析二維碼圖檔,解析條碼圖檔等。
這幾天抽了點時間,将之前的代碼完善了一下,主要是修複了一些bug,增加了解析二維碼圖檔,條碼圖檔,生成二維碼圖檔,閃光燈等。還簡化了內建的方式,隻需要添加一下依賴就能使用了,具體效果圖如下。
有圖有真相
1.基本的掃一掃
掃描二維碼
從圖檔可以看到,我掃的二維碼還是挺複雜的一個二維碼,識别速度還可以。具體使用跟裝置的攝像頭配置有很大關系。
掃描條碼(準确率不太高,後期再想辦法優化吧,畢竟掃條碼不是太常用)
2.閃光燈(如果裝置支援閃光的話,顯示閃光燈按鈕,否則不會顯示)
3.解析二維碼圖檔
4.解析條碼圖檔
5.生成二維碼(可以添加logo)
掃描下載下傳APK體驗一下
可以先下載下傳APK體驗一下:
zxingDemo.apk
或者直接用浏覽器掃描下載下傳,不需要積分
使用方法
在使用上比之前版本簡化了很多步驟,目前的版本應該足夠日常使用了,如果你需要定制界面或者使用其中的某些功能,你可以直接去github下載下傳demo,直接将moudle依賴到你的項目中,然後修改源碼即可。覺得還行話記得給個start哦,我會持續進行優化的。
https://github.com/yuzhiqiang1993/zxing
這裡我隻介紹直接依賴的使用方法。
1.添加依賴
在根build.gradle中添加**
maven { url 'https://jitpack.io' }
**
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
在你的app的build.gradle中添加依賴**
implementation 'com.github.yuzhiqiang1993:zxing:2.1.4'
**
目前并非最新版本,請到github上擷取最新版本号,以免在使用過程中出現問題。
最新版本
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:support-vector-drawable:26.1.0'
/*添加依賴*/
implementation 'com.github.yuzhiqiang1993:zxing:2.1.4'
}
如果你的gradle版本是2.x的 用compile代替implementation 即可。
2.依賴添加完之後就可以使用了
首先記得申請權限,本來我是把權限給內建到庫裡的,但是這樣的話會導緻首次跳轉到掃描頁面申請權限時會阻塞,直到給權限為止,想了想還是把權限放開,在跳轉掃描界面之前自己去處理權限比較好。
下面是需要動态申請的權限
Manifest.permission.CAMERA
Manifest.permission.READ_EXTERNAL_STORAGE
跳轉到掃描界面
如下面代碼所示,直接使用intent即可,也可以傳一個ZxingConfig類,這個類可以控制是否顯示底部的布局,是否播放提示音等,也可不傳。
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
/*ZxingConfig是配置類 可以設定是否顯示底部布局,閃光燈,相冊,是否播放提示音 震動等動能
* 也可以不傳這個參數
* 不傳的話 預設都為預設不震動 其他都為true
* */
//ZxingConfig config = new ZxingConfig();
//config.setShowbottomLayout(true);//底部布局(包括閃光燈和相冊)
//config.setPlayBeep(true);//是否播放提示音
//config.setShake(true);//是否震動
//config.setShowAlbum(true);//是否顯示相冊
//config.setShowFlashLight(true);//是否顯示閃光燈
//intent.putExtra(Constant.INTENT_ZXING_CONFIG, config);
startActivityForResult(intent, REQUEST_CODE_SCAN);
在onActivityResult中接收解析的結果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 掃描二維碼/條碼回傳
if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {
if (data != null) {
String content = data.getStringExtra(Constant.CODED_CONTENT);
result.setText("掃描結果為:" + content);
}
}
}
好了,實作一個基本的掃一掃就是如此的簡單
生成二維碼
如果你有生成二維碼的需求,可以直接通過
CodeCreator.createQRCode(contentEtString, 400, 400, null);
即可。
try {
/*
* contentEtString:字元串内容
* w:圖檔的寬
* h:圖檔的高
* logo:不需要logo的話直接傳null
* */
Bitmap logo = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
bitmap = CodeCreator.createQRCode(contentEtString, 400, 400, logo);
} catch (WriterException e) {
e.printStackTrace();
}
好了,基本就是這些了,上面有github位址,覺得好用的話給個start呦!是在不想使用github的話這裡給出源碼demo,需要的可以下載下傳
源碼版demo
github版的使用demo
github位址
如果你覺得本文對你有幫助,麻煩動動手指頂一下,算是對本文的一個認可,如果文中有什麼錯誤的地方,還望指正,轉載請注明轉自喻志強的部落格 ,謝謝!