您的位置:首页 > 移动开发 > Android开发

BGAQRCode-Android的简单使用

2017-04-02 00:16 225 查看
[url=https://github.com/bingoogolapple/BGAQRCode-Android]https://github.com/bingoogolapple/BGAQRCode-Android

依赖文件(demo中用到的有些可根据需求改变)

compile 'com.google.zxing:core:3.2.1'
compile 'cn.bingoogolapple:bga-qrcodecore:1.1.7@aar'
compile 'cn.bingoogolapple:bga-zxing:1.1.7@aar'


根据需求加入对应的权限(动态获取权限请根据easyPermission文档操作)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
//这句是使用图片选择器框架时用到的
xmlns:tools="http://schemas.android.com/tools"
package="com.huaqiang.zxingdemo">
//图片选择框架用到
<uses-sdk tools:overrideLibrary="cn.bingoogolapple.photopicker,cn.bingoogolapple.androidcommon.adapter" />

<uses-permission android:name="android.permission.CAMERA" />
<!--android.permission.VIBRATE允许访问震动权限-->
<uses-permission android:name="android.permission.VIBRATE" />
<!--android.permission.FLASHLIGHT允许访问闪光灯的权限-->
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


布局中使用

<!--app:qrcv_barcodeRectHeight条码扫描框的宽度
qrcv_borderSize扫描框的宽度
qrcv_cornerColor扫描框的颜色
qrcv_cornerLength扫描框边角线的长度
qrcv_cornerSize扫描框边角线的宽度
qrcv_customScanLineDrawable扫描线的图片资源「默认的扫描线图片样式不能满足你的需求时使用,设置该属性后 qrcv_isShowDefaultScanLineDrawable、qrcv_scanLineSize、qrcv_scanLineColor 将失效」
qrcv_isBarcode是否是扫条形码
qrcv_isCenterVertical扫描框是否垂直居中,该属性为true时会忽略 qrcv_topOffset 属性
qrcv_isOnlyDecodeScanBoxArea    是否只识别扫描框区域的二维码
qrcv_isScanLineReverse扫描线是否来回移动
qrcv_isShowDefaultGridScanLineDrawable是否显示默认的网格图片扫描线
qrcv_isShowTipBackground是否显示提示文案的背景
qrcv_isShowTipTextAsSingleLine是否把提示文案作为单行显示
qrcv_isTipTextBelowRect提示文案是否在扫描框的底部
qrcv_maskColor除去扫描框,其余部分阴影颜色
qrcv_qrCodeTipText
qrcv_rectWidth  扫描框的宽度
qrcv_scanLineColor扫描线的颜色「扫描线和默认的扫描线图片的颜色」
qrcv_scanLineMargin扫描线距离上下或者左右边框的间距
qrcv_scanLineSize扫描线的宽度
qrcv_toolbarHeight   Toolbar 的高度,通过该属性来修正由 Toolbar 导致扫描框在垂直方向上的偏差
qrcv_topOffset扫描框距离 toolbar 底部的距离-->
<cn.bingoogolapple.qrcode.zxing.ZXingView
android:id="@+id/zxingview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:qrcv_animTime="1000"
app:qrcv_barCodeTipText="将条码放入框内,即可自动扫描"
app:qrcv_barcodeRectHeight="140dp"
app:qrcv_borderColor="@android:color/white"
app:qrcv_borderSize="1dp"
app:qrcv_cornerColor="@color/colorPrimaryDark"
app:qrcv_cornerLength="20dp"
app:qrcv_cornerSize="3dp"
app:qrcv_customScanLineDrawable="@drawable/scan_icon_scanline"
app:qrcv_isBarcode="false"
app:qrcv_isCenterVertical="false"
app:qrcv_isOnlyDecodeScanBoxArea="false"
app:qrcv_isScanLineReverse="true"
app:qrcv_isShowDefaultGridScanLineDrawable="false"
app:qrcv_isShowDefaultScanLineDrawable="true"
app:qrcv_isShowTipBackground="true"
app:qrcv_isShowTipTextAsSingleLine="false"
app:qrcv_isTipTextBelowRect="false"
app:qrcv_maskColor="#33FFFFFF"
app:qrcv_qrCodeTipText="将二维码/条码放入框内,即可自动扫描"
app:qrcv_rectWidth="200dp"
app:qrcv_scanLineColor="@color/colorPrimaryDark"
app:qrcv_scanLineMargin="0dp"
app:qrcv_scanLineSize="0.5dp"
app:qrcv_tipTextColor="@android:color/white"
app:qrcv_tipTextSize="12sp"
app:qrcv_toolbarHeight="56dp"
app:qrcv_topOffset="90dp"/>


代码中应用实现QRCodeView.Delegate接口

public class ScannerActivity extends
4000
AppCompatActivity implements QRCodeView.Delegate {

@BindView(R.id.zxingview)
ZXingView zxingview;
@BindView(R.id.scanner)
ImageView scanner;
@BindView(R.id.btn_photo)
Button btnPhoto;

private static final int REQUEST_CODE_CHOOSE_QRCODE_FROM_GALLERY = 666;
@BindView(R.id.btn_openligtht)
Button btnOpenligtht;
@BindView(R.id.btn_closeligtht)
Button btnCloseligtht;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.btn_openBarcode)
Button btnOpenBarcode;
@BindView(R.id.btn_openQRcode)
Button btnOpenQRcode;
@BindView(R.id.activity_scanner)
RelativeLayout activityScanner;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scanner);
ButterKnife.bind(this);
initView();

}

@Override
protected void onStart() {
super.onStart();
//打开后置摄像头预览,但并没有开始扫描
zxingview.startCamera();
//开启扫描框
zxingview.showScanRect();
zxingview.startSpot();
}

@Override
protected void onStop() {
zxingview.stopCamera();
super.onStop();
}

@Override
protected void onDestroy() {
zxingview.onDestroy();
super.onDestroy();
}

private void initView() {
//隐藏toolbar上面的二维码图标
scanner.setVisibility(View.GONE);
btnPhoto.setVisibility(View.VISIBLE);
//设置二维码的代理
zxingview.setDelegate(this);
}
//扫描成功解析二维码成功后调用,可做对应的操作
@Override
public void onScanQRCodeSuccess(String result) {
//扫描成功后调用震动器
vibrator();
//显示扫描结果
Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
//再次延时1.5秒后启动
zxingview.startSpot();
}

private void vibrator() {
//获取系统震动服务
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(200);
}

//扫描失败后调用的方法
@Override
public void onScanQRCodeOpenCameraError() {
Toast.makeText(this, "相机打开失败", Toast.LENGTH_SHORT).show();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
zxingview.showScanRect();
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_CHOOSE_QRCODE_FROM_GALLERY) {
final String picturePath = BGAPhotoPickerActivity.getSelectedImages(data).get(0);

/*
这里为了偷懒,就没有处理匿名 AsyncTask 内部类导致 Activity 泄漏的问题
请开发在使用时自行处理匿名内部类导致Activity内存泄漏的问题,处理方式可参考 https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E6%80%BB%E7%BB%93.md */
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
return QRCodeDecoder.syncDecodeQRCode(picturePath);
}

@Override
protected void onPostExecute(String result) {
if (TextUtils.isEmpty(result)) {
Toast.makeText(ScannerActivity.this, "未发现二维码", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(ScannerActivity.this, result, Toast.LENGTH_SHORT).show();
}
}
}.execute();
}
}

@OnClick({R.id.btn_openligtht, R.id.btn_closeligtht, R.id.btn_photo,R.id.btn_openBarcode, R.id.btn_openQRcode})
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_openligtht:
//打开闪关灯
zxingview.openFlashlight();
break;
case R.id.btn_closeligtht:
//关闭闪光灯
zxingview.closeFlashlight();
break;
case R.id.btn_photo:
//参数1 应用程序上下文
//参数2 拍照后图片保存的目录。如果传null表示没有拍照功能,如果不为null则具有拍照功能,
//参数3 图片选择张数的最大值
//参数4 当前已选中的图片路径集合,可以传null
//参数5 滚动列表时是否暂停加载图片
startActivityForResult(BGAPhotoPickerActivity.newIntent(this, null, 1, null, false), REQUEST_CODE_CHOOSE_QRCODE_FROM_GALLERY);
break;
case R.id.btn_openBarcode:
//切换到条形码扫描
zxingview.changeToScanBarcodeStyle();
break;
case R.id.btn_openQRcode:
//切换到二维码扫描
zxingview.changeToScanQRCodeStyle();
break;

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息