第一步 加库zxing库
//导入二维码识别库ZXing
implementation("com.journeyapps:zxing-android-embedded:4.2.0")
第二部获取摄像机权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />
第三步在Activity中或fragment中调用接口
把这个丢按键监听器里启动就行。
void Scan_init(){
integrator = new IntentIntegrator(getActivity());
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); // 设置只扫描QR码
// integrator.setPrompt("请扫描二维码"); // 设置扫描提示
integrator.setPrompt(" "); // 设置扫描提示
integrator.setCameraId(0); // 使用设备的特定相机(这里是第一个相机)
integrator.setBeepEnabled(false); // 禁用扫描成功时的蜂鸣声
integrator.setOrientationLocked(false); // 锁定扫描器的方向
integrator.setBarcodeImageEnabled(false); // 禁用条形码图像的显示
integrator.setCaptureActivity(CaptureActivity.class);
integrator.initiateScan(); // 发起扫描
}
如果是Activity中实现的可以直接在onActivityResult函数中获取,直接重写就行了
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//获取扫码结果
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
Toast.makeText(getContext(),result.toString(),Toast.LENGTH_SHORT).show();
}
如果是在fragment中实现的,就在这里用接口发过去,或者其他的方式也行,反正扫码结果就在这里可以得到。
注意:这样得到的扫码框是横屏的,不是竖屏的
想要修改样式需要,重写zxing库中的layout和相应的Activity
不同版本可能位置不一样可以自己找找,对着 ctrl+左键 CaptureActivity 可以直接跳到对应的Activity中,重写直接new一个Activity,名字什么的对应上,然后将库里面的对应内容复制粘贴进去,在修改布局以及其他的。
layout就是这两个。
我这里没去做这个复杂的操作,我就只重新zxing_capture.xml,直接调整扫码框大小,改为了方形,然后去掉了提示语,假装一下竖屏。
实际样子。别问我为啥不重新,因为我。