一.扫描二维码
1.依赖:
1.1.添加到你的 Project Build.gradle:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
1.2.添加到你的 Module Build.gradle:
dependencies {
compile 'com.github.qingmei2:QrCodeScannerView-Android:1.1'
compile 'com.google.zxing:core:3.2.1'
}
2.直接在你的布局文件xml中使用
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mei_husky.library.view.QRCodeScannerView
android:id="@+id/scanner_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.mei_husky.library.view.QRCoverView
android:id="@+id/cover_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
3.代码部分:
private QRCodeScannerView mScannerView;
private QRCoverView mCoverView;
private final int PERMISSION_REQUEST_CAMERA = 0;
@Override
public int getLayoutResId() {
return R.layout.activity_erweima;
}
@Override
protected void initView() {
mScannerView = (QRCodeScannerView) findViewById(R.id.scanner_view);
mCoverView = (QRCoverView) findViewById(R.id.cover_view);
}
@Override
protected void initListener() {
//自动聚焦间隔2s
mScannerView.setAutofocusInterval(2000L);
//闪光灯
mScannerView.setTorchEnabled(true);
//修改扫描框外背景色
mCoverView.setCoverViewOutsideColor(R.color.xb_bg1);
//修改四个脚的颜色
mCoverView.setCoverViewCornerColor(R.color.egg_red );
//不显示扫描线
mCoverView.setShowLaser(false);
//扫描框的宽度和高度
mCoverView.setCoverViewScanner(220, 220);//提交修改UI
//扫描结果监听处理
mScannerView.setOnQRCodeReadListener(new QRCodeScannerView.OnQRCodeScannerListener() {
@Override
public void onDecodeFinish(String text, PointF[] points) {
Log.d("tag", "扫描结果 : " + text); //扫描到的内容
scannerResult(text);
}
});
//相机权限监听
mScannerView.setOnCheckCameraPermissionListener(new QRCodeScannerView.OnCheckCameraPermissionListener() {
@Override
public boolean onCheckCameraPermission() {
if (ContextCompat.checkSelfPermission(act, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(act, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA);
return false;
}
}
});
}
/**
* 权限请求回调
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode != PERMISSION_REQUEST_CAMERA) {
return;
}
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mScannerView.grantCameraPermission();
}
}
@Override
protected void initData(boolean isNetWork) {
title.setText("扫瞄二维码");
//开启后置摄像头
mScannerView.setBackCamera();
}
/**
* 二维码扫描结果
* @param text
*/
private void scannerResult(String text) {
}
@Override
protected void onResume() {
super.onResume();
mScannerView.startCamera();
}
@Override
protected void onPause() {
super.onPause();
mScannerView.stopCamera();
}
二.生成二维码静态方法:
public static Bitmap Create2DCode2(String text) {
//生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix matrix = null;
try {
matrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, 400, 400,hints);
} catch (WriterException e) {
e.printStackTrace();
}
int width = matrix.getWidth();
int height = matrix.getHeight();
//二维矩阵转为一维像素数组,也就是一直横着排了
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if(matrix.get(x, y)){
pixels[y * width + x] = 0xff000000;
} else {
pixels[y * width + x] = 0xffffffff;
}
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
//通过像素数组生成bitmap,具体参考api
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
三.解析url的工具类:
public class UrlUtils {
/***
* 获取url 指定name的value;
* @param url
* @param name
* @return
*/
public static String getValueByName(String url, String name) {
String result = "";
int index = url.indexOf("?");
String temp = url.substring(index + 1);
String[] keyValue = temp.split("\\&");
for (String str : keyValue) {
if (str.contains(name)) {
result = str.replace(name + "=", "");
}
}
return result;
}
}