Android 超簡易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ǔ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ǔ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)聽事件
2、在監(jiān)聽事件中,利用Intent
和startActivityForResult
跳到Zxing定義好的默認(rèn)的掃碼界面CaptureActivity
中(也可以自定義掃碼界面)
3、重寫onActivityResult方法處理二維碼返回的內(nèi)容
要點(diǎn):
其中的REQUEST_CODE
Zxing是定義好的,一定要使用這個(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)聽:
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
得到二維碼內(nèi)容,我這里只是將獲得的內(nèi)容進(jì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 超簡易Zxing框架 生成二維碼+掃碼功能的文章就介紹到這了,更多相關(guān)Android Zxing框架生成二維碼+掃碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android自定義控件實(shí)現(xiàn)方向盤效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)方向盤效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04Android編程實(shí)現(xiàn)橫豎屏切換時(shí)不銷毀當(dāng)前activity和鎖定屏幕的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)橫豎屏切換時(shí)不銷毀當(dāng)前activity和鎖定屏幕的方法,涉及Android屬性設(shè)置及activity操作的相關(guān)技巧,需要的朋友可以參考下2015-11-11Android自定義View 使用PathMeasure簡單模仿系統(tǒng)ProgressBar(四)
這篇文章主要為大家詳細(xì)介紹了Android自定義View,使用PathMeasure簡單模仿系統(tǒng)ProgressBar,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營商的實(shí)現(xiàn)代碼
有時(shí)候我們需要在Android中獲取本機(jī)網(wǎng)絡(luò)提供商呢,這里簡單分享下,方便需要的朋友2013-05-05Android 中從屏幕左下角彈出Dialog動(dòng)畫效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 中從屏幕左下角彈出Dialog動(dòng)畫效果的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12Android 組件Gallery和GridView示例講解
本文主要講解Android 組件Gallery和GridView,這里詳細(xì)介紹組件Gallery和GridView的知識(shí)要點(diǎn),并附示例代碼和實(shí)現(xiàn)效果圖,有興趣的小伙伴可以參考下2016-08-08