全网最新最快,占用资源最少的二维码扫描框架
强烈推荐,速度快,占用资源少,安利安利
依赖文件(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文档操作)
<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" />
布局中使用
<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_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 MainActivity extends AppCompatActivity implements QRCodeView.Delegate {
private static final int REQUEST_CODE_CHOOSE_QRCODE_FROM_GALLERY = 666;
@BindView(R.id.zxingview)
cn.bingoogolapple.qrcode.zxing.ZXingView zxingview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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() {
//设置二维码的代理
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 = "1";
/*
这里为了偷懒,就没有处理匿名 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(MainActivity.this, "未发现二维码", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
}
}
}.execute();
}
}
}
扫描 速度提升太多了,推荐ZXing更换ZBar,更多属性,还是要到github上去了解。