BGAQRCode-Android的简单使用
来源:互联网 发布:网络教育文凭事业单位 编辑:程序博客网 时间:2024/05/16 06:43
[url]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 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; } }}
0 0
- BGAQRCode-Android的简单使用
- BGAQRCode-Android
- BGAQRCode-Android
- Android - BGAQRCode 扫描二维码
- 最好用QRCode库--BGAQRCode-Android
- Android二维码扫码ZXing,barcodescanner和BGAQRCode-Android技术比较
- android Ijkplayer最简单的简单使用
- Android ListView的简单使用
- Android Bundle的简单使用
- Android 数据库的简单使用
- android Service 的简单使用
- android scrollview 简单的使用
- android Spinner的简单使用
- android startActivityForResult 的简单使用
- Android Handler的简单使用
- android FragmentTabHost 的简单使用
- android Fragment的简单使用
- Android sharepreference 简单的使用
- BZOJ 3221 [Codechef FEB13] Obserbing the tree树上询问 树链剖分 主席树维护区间加等差数列
- 独木舟
- Linux必学的60个命令(五)
- Discuz API&JSON 适用于IOS及Android移动端开发
- RHEL6.4(或CentOS 6)源码安装Git2.9.3
- BGAQRCode-Android的简单使用
- Linux必学的60个命令(六)
- 不用VPN上Google的方法
- sql注入之GET/POST注入
- Fragment的基本使用
- 【开放mysql远程连】 报错:1130-host ... is not allowed to connect to this MySql server 不使用localhost
- 在service里发送notification并传递参数
- 模仿tmall主页效果 做的一个轮播
- spring 配置 druid 实例