google的zxing作为开源的二维码支持库
生成二维码需要添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
具体使用方法参考文档说明,这里只是当前版本的一个参考:
1、扫描二维码:
IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
integrator.setPrompt("开始扫描....");//扫描时,显示的文字
integrator.setBeepEnabled(true);//扫描成功的声音开启
integrator.initiateScan();
重写父类的方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
if (result.getContents() == null) {
Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
2、生成二维码:
private static final String inCode = "ISO-8859-1";//解码器名称(重点,成员属性)
String str = "莫妮卡贝鲁奇";
try { //有可能出现异常,解码器名称定义为常量!!!
//设置编码为UTF-8 设置解码器,防止乱码
str = new String("莫妮卡贝鲁奇是我大老婆!".getBytes("utf-8"), inCode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Bitmap bitmap = generateQRCode(str);//调用自定义生成二维码图片的方法
((ImageView) (findViewById(R.id.image))).setImageBitmap(bitmap);
生成二维码图片的方法:
private Bitmap generateQRCode(String content) {
try {
QRCodeWriter writer = new QRCodeWriter();
// MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, 500, 500);
return bitMatrix2Bitmap(matrix);
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
辅助方法:
private Bitmap bitMatrix2Bitmap(BitMatrix matrix) {
int w = matrix.getWidth();
int h = matrix.getHeight();
int[] rawData = new int[w * h];
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
int color = Color.WHITE;
if (matrix.get(i, j)) {
color = Color.BLACK;
}
rawData[i + (j * w)] = color;
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
bitmap.setPixels(rawData, 0, w, 0, 0, w, h);
return bitmap;
}