1.点击拉起图库选择图片
TextView photoText = findViewById(R.id.capture_textview_photo);
photoText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dispatchTakePictureIntent();
}
});
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
takePictureIntent.setType("image/*");
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, PICK_IMAGE_REQUEST_CODE);
}
}
2.选中图片后返回处理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST_CODE && resultCode == RESULT_OK) {
final Uri imageUri = data.getData();
try {
Bitmap originalBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
// 将原始Bitmap对象按照目标宽度和高度进行缩放
final Bitmap scaledBitmap = Bitmap.createScaledBitmap(originalBitmap, 200, 200, false);
String result = QRCodeDecoder.syncDecodeQRCode(scaledBitmap);
if(TextUtils.isEmpty(result)){
Toast.makeText(this, "无法识别", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "扫描成功", Toast.LENGTH_SHORT).show();
Intent intent = getIntent();
intent.putExtra("codedContent", result);
setResult(RESULT_OK, intent);
}
} catch (IOException e) {
e.printStackTrace();
}
finish();
}
}
这里很奇怪直接将originalBitmap进行decode无法识别出结果,必须执行
// 将原始Bitmap对象按照目标宽度和高度进行缩放 final Bitmap scaledBitmap = Bitmap.createScaledBitmap(originalBitmap, 200, 200, false);
将bitmap缩放一下再进行decode,这里可能与zxing版本较老有关,图片识别成功率较低