我是靠谱客的博主 纯情火龙果,这篇文章主要介绍让你的APP轻松加上扫描二维码功能,现在分享给大家,希望可以做个参考。

在这个二维码横行的年代,如果一个APP连扫描二维码的功能都没有是会被耻笑的。今天小老虎教小白们如何为自己的APP添加扫描二维码功能和生成二维码,并做到外部扫描跳转网页,内部扫描跳转具体Activity。


1.准备好ZXING包

ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。Zxing库的主要部分支持以下几个功能:核心代码的使用、适用于J2SE客户端的版本、适用于Android客户端的版本(即BarcodeScanner)、Android的集成(通过Intent支持和BarcodeScanner的集成)等。
本人用的是AndroidStudio,所以只要简单地远程依赖下载就OK了,也可以选择和eclipse一样用导入第三方类库。导包不会的话请自行百度一下,这里就不一一科普了。

2.生成二维码

1.仅供APP内部使用的二维码
只供内部使用的话只要简单的内容去区分不同用户和不同内容就好,举个栗子:
比如说我要内部扫描添加好友,我就用一个“user”和userID来形成二维码就好了,我们用zxing提供的EncodingHandler.createQRCode方法生成一张二维码(返回的是bitmap),第一个参数是要形成二维码的字符串,第二个参数是二维码的长度(它的鞭长= = )。

复制代码
1
Bitmap qrCodeBitmap = EncodingHandler.createQRCode("http://qrcode/user/"+info.userID, 450);

2.可供微信,QQ等APP扫描跳转网页,也可以进行内部跳转
这个直接用你要跳转的网页的url生成二维码就OK,这样外部扫描就直接跳到那个网页了,那内部呢?我们下面会说到!

3.扫描二维码和内部进行页面跳转

1.扫描二维码
这里的扫描直接跳到zxing包下的CaptureActivity,里面的handleDecode方法会有一个参数rawResult,这个就是扫描所获取的信息,只要调用rawResult.getText就可以得到扫描所得的字符串。这里我做了一些处理,把得到的字符串用setResult发出去,一会再说怎么处理,先贴一波代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override public void handleDecode(Result rawResult, Bundle bundle) { super.handleDecode(rawResult, bundle); String resultString = rawResult.getText(); KLog.d("scann result: " + resultString); if (resultString.equals("")) { Toast.makeText(CaptureActivity.this, "扫描失败", Toast.LENGTH_SHORT).show(); } else{ Intent resultIntent = new Intent(); Bundle data = new Bundle(); data.putString("result", resultString); resultIntent.putExtras(data); this.setResult(RESULT_OK, resultIntent); } CaptureActivity.this.finish(); }

2.判断并跳转
我们在MainActivity重写onActivityResult方法,在这里进行处理跳转。
刚才我们生成app内部二维码最后是“/+id”,那么我们先把最后一个“/”后面的id拿到手,像这样:

复制代码
1
2
3
//解析是否扫描用户的二维码 id = Long.valueOf(scanResult.substring(scanResult.lastIndexOf('/') + 1));

然后我们再用URI的 Uri.parse把服务器返回的url转成uri,再获取是否含有特定字段,有的话再获取其id,无论是跳转外部还是跳转内部,只要先判断字符串是否含有key就OK了,下面是方法的完整代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 { //解析是否跳转网页二维码 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; }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override protected 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; } }

这次的内容就到此结束了,如果想要这部分完整代码的请在评论留下邮箱,我重新写一份完整的Demo发给有需要的朋友 o(∩_∩)o

最后

以上就是纯情火龙果最近收集整理的关于让你的APP轻松加上扫描二维码功能的全部内容,更多相关让你内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部