package com.bw.qrcode.demo;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.Settings;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;
import me.iwf.photopicker.PhotoPicker;
import me.iwf.photopicker.PhotoPreview;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private TextView tvCreateQrcode;
private TextView tvReadQrcode;
private ImageView ivQrCode;
private TextView tvQrcode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initView() {
tvCreateQrcode = (TextView) findViewById(R.id.tvCreateQrcode);
tvReadQrcode = (TextView) findViewById(R.id.tvReadQrcode);
ivQrCode = (ImageView) findViewById(R.id.ivQrCode);
tvQrcode = (TextView) findViewById(R.id.tvQrcode);
}
private void initListener() {
tvCreateQrcode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: 2019/11/1 生成二维码
createQrCode();
}
});
tvReadQrcode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: 2019/11/1 解析从相册获取的二维码
readQrCode();
}
});
tvQrcode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//打开相册界面,这个界面是一个activity,跟我们自己写的activity没有任何区别
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 200);
}
});
}
//解析二维码
private void readQrCode() {
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, 100);
}
//生成二维码
private void createQrCode() {
/**
* 1、二维码的内容
* 宽度
* 高度
* bitmap:二维码的logo
*/
Bitmap mBitmap = CodeUtils.createImage("天王盖地虎", 400, 400, BitmapFactory.decodeResource(getResources(), R.mipmap.wanqiwen));
ivQrCode.setImageBitmap(mBitmap);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100) {
onQrCodeResult(requestCode, resultCode, data);
} else if (requestCode == 200) {
onImageReuslt(requestCode, resultCode, data);
}
}
//解析扫描的二维码
private void onQrCodeResult(int requestCode, int resultCode, @Nullable Intent data) {
/**
* 处理二维码扫描结果
*/
if (requestCode == 100) {
//处理扫描结果(在界面上显示)
if (null != data) {
Bundle bundle = data.getExtras();
if (bundle == null) {
return;
}
if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
String result = bundle.getString(CodeUtils.RESULT_STRING);
Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
} else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
}
}
}
}
//解析从相册获取的二维码
private void onImageReuslt(int requestCode, int resultCode, @Nullable Intent data) {
//获取选择的二维码图片
if (requestCode == 200) {
if (data != null) {
Uri uri = data.getData();
ContentResolver cr = getContentResolver();
try {
Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片
ivQrCode.setImageBitmap(mBitmap);
String result;
Cursor cursor = this.getContentResolver().query(uri,
new String[]{MediaStore.Images.ImageColumns.DATA},//
null, null, null);
if (cursor == null) {
result = uri.getPath();
} else {
cursor.moveToFirst();
int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(index);
cursor.close();
}
//使用zxing去解析这张图片
CodeUtils.analyzeBitmap(result, new CodeUtils.AnalyzeCallback() {
@Override
public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show();
}
@Override
public void onAnalyzeFailed() {
Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}