让你的APP轻松加上扫描二维码功能
在這個二維碼橫行的年代,如果一個APP連掃描二維碼的功能都沒有是會被恥笑的。今天小老虎教小白們?nèi)绾螢樽约旱腁PP添加掃描二維碼功能和生成二維碼,并做到外部掃描跳轉(zhuǎn)網(wǎng)頁,內(nèi)部掃描跳轉(zhuǎn)具體Activity。
1.準備好ZXING包
ZXing是一個開放源碼的,用Java實現(xiàn)的多種格式的1D/2D條碼圖像處理庫,它包含了聯(lián)系到其他語言的端口。Zxing可以實現(xiàn)使用手機的內(nèi)置的攝像頭完成條形碼的掃描及解碼。Zxing庫的主要部分支持以下幾個功能:核心代碼的使用、適用于J2SE客戶端的版本、適用于Android客戶端的版本(即BarcodeScanner)、Android的集成(通過Intent支持和BarcodeScanner的集成)等。
本人用的是AndroidStudio,所以只要簡單地遠程依賴下載就OK了,也可以選擇和eclipse一樣用導入第三方類庫。導包不會的話請自行百度一下,這里就不一一科普了。
2.生成二維碼
1.僅供APP內(nèi)部使用的二維碼
只供內(nèi)部使用的話只要簡單的內(nèi)容去區(qū)分不同用戶和不同內(nèi)容就好,舉個栗子:
比如說我要內(nèi)部掃描添加好友,我就用一個“user”和userID來形成二維碼就好了,我們用zxing提供的EncodingHandler.createQRCode方法生成一張二維碼(返回的是bitmap),第一個參數(shù)是要形成二維碼的字符串,第二個參數(shù)是二維碼的長度(它的鞭長= = )。
2.可供微信,QQ等APP掃描跳轉(zhuǎn)網(wǎng)頁,也可以進行內(nèi)部跳轉(zhuǎn)
這個直接用你要跳轉(zhuǎn)的網(wǎng)頁的url生成二維碼就OK,這樣外部掃描就直接跳到那個網(wǎng)頁了,那內(nèi)部呢?我們下面會說到!
3.掃描二維碼和內(nèi)部進行頁面跳轉(zhuǎn)
1.掃描二維碼
這里的掃描直接跳到zxing包下的CaptureActivity,里面的handleDecode方法會有一個參數(shù)rawResult,這個就是掃描所獲取的信息,只要調(diào)用rawResult.getText就可以得到掃描所得的字符串。這里我做了一些處理,把得到的字符串用setResult發(fā)出去,一會再說怎么處理,先貼一波代碼
2.判斷并跳轉(zhuǎn)
我們在MainActivity重寫onActivityResult方法,在這里進行處理跳轉(zhuǎn)。
剛才我們生成app內(nèi)部二維碼最后是“/+id”,那么我們先把最后一個“/”后面的id拿到手,像這樣:
然后我們再用URI的 Uri.parse把服務(wù)器返回的url轉(zhuǎn)成uri,再獲取是否含有特定字段,有的話再獲取其id,無論是跳轉(zhuǎn)外部還是跳轉(zhuǎn)內(nèi)部,只要先判斷字符串是否含有key就OK了,下面是方法的完整代碼
private void handleScanResult(String scanResult) {if (StringUtils.isEmpty(scanResult)) {return;}long id = 0;try {//解析是否掃描用戶的二維碼id = Long.valueOf(scanResult.substring(scanResult.lastIndexOf('/') + 1));} catch (NumberFormatException formatException) {try {//解析是否跳轉(zhuǎn)網(wǎng)頁二維碼Uri url = Uri.parse(scanResult);if ("club_detail".equals(url.getQueryParameter("qrcode_type"))) {String clubId = url.getQueryParameter("clubId");id = Long.parseLong(clubId);}} catch (Exception e) {e.printStackTrace();}} catch (Exception e) {e.printStackTrace();}if (id == 0) {return;} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {switch (requestCode) {case MainMeTabFragment.KEY_REQUEST_CODE:Bundle bundle = data.getExtras();String scanResult = bundle.getString("result");//處理二維碼handleScanResult(scanResult);default:break;}}這次的內(nèi)容就到此結(jié)束了,如果想要這部分完整代碼的請在評論留下郵箱,我重新寫一份完整的Demo發(fā)給有需要的朋友 o(∩_∩)o
總結(jié)
以上是生活随笔為你收集整理的让你的APP轻松加上扫描二维码功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试中一般术语的的英文缩写
- 下一篇: 领域驱动设计(DDD)实践之路(三):如