现在每一个APP都会有扫一扫的功能,而这个功能就是在github上下载的一个开源库做成的,在我们实际的生活中应用的十分广泛,如支付宝等等基本都是利用这个开源库Zxing做出来的;今天我就和大家一起来学习2种方法将这个功能接入到我们的实际项目中;
一.第一种方式:
1.倒入libzxing这个库(as用户);
链接: https://pan.baidu.com/s/1slpKFm9 密码: rc53
2.布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.zxing.MainActivity">
//显示扫描结果
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
//点击后扫描
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="200dp" />
//制作二维码显示时使用
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
- 代码
//android 6.0以后的要加上这行代码,因为扫二维码需要调用摄像头,侵犯用户隐私:1代码请求码
//兄弟们,看好了参数类型是数组,就是说我们可以一次性请求多个权限;
requestPermissions(new String[]{Manifest.permission.CAMERA},1);
//上面这个请求权限的方法会回调这个方法,进行权限判断
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 成功获取权限
findView();
//下面的这几行代码是用于生成二维码的
//第一个参数是二维码包含的内容,第二个和第三个是宽高,第四个是你的二维码中间的那个小图标,参数类型是bitmap
Bitmap bitmap = EncodingUtils.createQRCode("hello world, my name is wang shaolong ,is from China! ", 200, 200, BitmapFactory.decodeResource(getResources(), R.mipmap.mine));
//将生成的二维码显示到imageview组件上
iv.setImageBitmap(bitmap);
} else {
// 权限获取失败
Toast.makeText(MainActivity.this, "CALL_PHONE Denied", Toast.LENGTH_SHORT)
.show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
//找组件
private void findView() {
Button btn = (Button) findViewById(R.id.btn);
tv = (TextView) findViewById(R.id.tv);
iv = (ImageView) findViewById(R.id.iv);
//点击
btn.setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
//这个result就是扫到的数据,别人为什么key是result,不是其他的,因为源码里面就是写死的;在这里你就可以操作这个数据了,他可以是url,这样就可以直接打开一个网页;
String result = bundle.getString("result");
tv.setText(result);
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn:
//二维码本质即使一个activity,只不过是这个库已经帮我们做好了-CaptureActivity,请求成功后会回调onActivityResult
startActivityForResult(new Intent(MainActivity.this , CaptureActivity.class) , 0);
break;
}
}
好了,这就完了,效果杠杠的;
第二种方式下篇博客在说,要不这篇博客就太长了;