概述
在这个二维码横行的年代,如果一个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),第一个参数是要形成二维码的字符串,第二个参数是二维码的长度(它的鞭长= = )。
Bitmap qrCodeBitmap = EncodingHandler.createQRCode("http://qrcode/user/"+info.userID, 450);
2.可供微信,QQ等APP扫描跳转网页,也可以进行内部跳转
这个直接用你要跳转的网页的url生成二维码就OK,这样外部扫描就直接跳到那个网页了,那内部呢?我们下面会说到!
3.扫描二维码和内部进行页面跳转
1.扫描二维码
这里的扫描直接跳到zxing包下的CaptureActivity,里面的handleDecode方法会有一个参数rawResult,这个就是扫描所获取的信息,只要调用rawResult.getText就可以得到扫描所得的字符串。这里我做了一些处理,把得到的字符串用setResult发出去,一会再说怎么处理,先贴一波代码
@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拿到手,像这样:
//解析是否扫描用户的二维码
id = Long.valueOf(scanResult.substring(scanResult.lastIndexOf('/') + 1));
然后我们再用URI的 Uri.parse把服务器返回的url转成uri,再获取是否含有特定字段,有的话再获取其id,无论是跳转外部还是跳转内部,只要先判断字符串是否含有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 {
//解析是否跳转网页二维码
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;
}
@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轻松加上扫描二维码功能的全部内容,希望文章能够帮你解决让你的APP轻松加上扫描二维码功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复