1.依赖导入
//二维码扫描
compile'com.journeyapps:zxing-android-embedded:3.5.0'
github地址:https://github.com/journeyapps/zxing-android-embedded
2.在Activity 或者Fragment中初始化
new IntentIntegrator(CallByctivity.this)
.setCaptureActivity(ScannAvtivity.class)// 设置自己的Activity
.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES)// 扫码的类型,可选:一维码,二维码,一/二维码
.setPrompt("")// 设置提示语 如果不设置会提示它默认的字,我在这里设置为空串
.setCameraId(1)// 选择摄像头,可使用前置或者后置 //0后置 ,1 前置
.setBeepEnabled(true)// 是否开启声音,扫完码之后会"哔"的一声
.setBarcodeImageEnabled(false)// 扫完码之后生成二维码的图片
.initiateScan();// 初始化扫码
3.在onActivityResult方法中接收 扫描到的数据
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result !=null) {
if (result.getContents() ==null) {
Log.d("CallByctivity","被取消");
}else {
Log.d("CallByctivity","扫描的" + result.getContents());
scannNumber++;
Log.d("CallByctivity","扫描到了" +scannNumber +"次");
EventBus.getDefault().post(new ScannEvent(scannNumber));
//再次打开扫描页
scann(); //启动扫描的方法
//因为项目需求重复扫描商品,并且记录扫描次数。这里我用EventBus传扫描次数,扫描完成后,我从新打开扫描页面
}
}else {
super.onActivityResult(requestCode, resultCode, data);
}
4.自定义扫描页面
public class CustomCaptureActivityextends Activity {
private CaptureManagercapture;
private DecoratedBarcodeViewbarcodeScannerView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom);
barcodeScannerView = (DecoratedBarcodeView) findViewById(R.id.bv);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CustomCaptureActivity.this.finish();
}
});
capture =new CaptureManager(this,barcodeScannerView);
capture.initializeFromIntent(getIntent(), savedInstanceState);
capture.decode();
}
@Override
protected void onResume() {
super.onResume();
capture.onResume();
}
@Override
protected void onPause() {
super.onPause();
capture.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
capture.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
capture.onSaveInstanceState(outState);
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[],@NonNull int[] grantResults) {
capture.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return barcodeScannerView.onKeyDown(keyCode, event) ||super.onKeyDown(keyCode, event);
}
}
//这里没有放自己的扫描页面,我放的demo测试写的页面。
5.自定义xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.journeyapps.barcodescanner.DecoratedBarcodeView
android:id="@+id/bv"
android:layout_width="match_parent"
android:layout_height="400dp" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="结束页面" />
相当简单的扫码自定义控件










网友评论