使用zxing的第三方抽取包,简单的几行代码就可以完成。
首先,下载第三方抽取包libzxing
将其按一个model导入到我们建好的app中,添加model引用,添加权限。
model倒入后的结构如图:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90zZixGaykVN4dVWyhGSlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DNzATM0czMxATNyITM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
注意:因为权限问题,我们在主程序代码中有一大段是对权限的请求,有注释。
现在看代码:
首先是布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context="com.devin.qrcodedemo.MainActivity">
<TextView
android:id="@+id/txt_result"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_scan_qrcode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="扫描二维码" />
<EditText
android:id="@+id/et_code"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_gen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="生成二维码"/>
<ImageView
android:id="@+id/img_qrcode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
然后是主代码:
/**
* 二维码快速解析和生成
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final int REQUEST_CODE = 0x0001;//请求码
private static final int REQUEST_PERMISSION_CAMERA_CODE = 0x0001;//相机权限请求码
private Button btnScan;//启动扫描
private Button btnGen;//生成二维码
private TextView txtResult;//显示返回的扫描结果
private EditText etCode;//生成二维码的文本
private ImageView imgQRCode;//显示生成的二维码图像
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
checkPermission();
}
/**
* 检查权限
*/
private void checkPermission() {
//获得摄像头权限状态
int permissionCamera = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
//如果没有权限
if (permissionCamera != PackageManager.PERMISSION_GRANTED) {
//请求权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA_CODE);
} else {
initListener();
}
}
/**
* 请求权限
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION_CAMERA_CODE) {
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
initListener();
}
}
}
/**
* 初始化
*/
private void initView() {
btnScan = (Button) findViewById(R.id.btn_scan_qrcode);
btnGen = (Button) findViewById(R.id.btn_gen);
txtResult = (TextView) findViewById(R.id.txt_result);
etCode = (EditText) findViewById(R.id.et_code);
imgQRCode = (ImageView) findViewById(R.id.img_qrcode);
}
/**
* 处理返回的扫描结果
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_OK) {
//获取到解析好的二维码文本
String result = data.getExtras().getString("result");
txtResult.setText(result);
}
}
}
/**
* 初始化按钮点击监听
*/
private void initListener() {
btnScan.setOnClickListener(this);
btnGen.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_scan_qrcode:
startSacn();
break;
case R.id.btn_gen:
startGen();
break;
default:
break;
}
}
/**
* 生成二维码
*/
private void startGen() {
String content = etCode.getText().toString();
if ("".equalsIgnoreCase(content)){
Toast.makeText(this, "内容不能为空", Toast.LENGTH_SHORT).show();
}else {
//调用工具类EncodingUtils生成二维码图片
Bitmap qrCode = EncodingUtils.createQRCode(content, 600, 600, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
imgQRCode.setImageBitmap(qrCode);
}
}
/**
* 进入扫描界面
*/
private void startSacn() {
Intent intent = new Intent(this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
}
就两个文件。很简单。感谢开源库的作者和做抽取的朋友。
如果对扫描框不满意可以去修改。
看看效果: