zxing二维码扫描

来源:互联网 发布:mac版ps导出图片很大 编辑:程序博客网 时间:2024/05/01 22:21

zxing介绍

github地址:https://github.com/zxing/zxing


代码很多,官方演示的例子在文件android,一个较为完整的app,导入Android studio,发现少了CameraConfigurationUtils,这个类在文件android-core下。官方效果图:

但是实际开发只需要扫码和生成二维码两个功能就夠了,因此我做了抽离删减,最终我的效果图:

zxing使用

添加依赖

1
compile 'com.google.zxing:core:3.2.1'

扫描二维码

1234
case R.id.qrcode_dencode: //扫描intent = new Intent(MainActivity.this, CaptureActivity.class);startActivityForResult(intent, REQUEST_CODE);break;
123456789
@Override   protected void onActivityResult(int requestCode, int resultCode, Intent data) {       super.onActivityResult(requestCode, resultCode, data);       if (resultCode == RESULT_OK) { //RESULT_OK = -1           Bundle bundle = data.getExtras();           String scanResult = bundle.getString("result");           Toast.makeText(MainActivity.this, scanResult, Toast.LENGTH_LONG).show();       }   }

生成二维码

123456789
case R.id.qrcode_encode: //生成try {       Bitmap mBitmap = QRCodeEncoder.encodeAsBitmap("http://wuxiaolong.me/", 300);       qrcodeImg.setImageBitmap(mBitmap);     } catch (Exception e) {       e.printStackTrace();     }    break;

识别二维码

1234567891011
//长按图片识别二维码       qrcodeImg.setOnLongClickListener(new View.OnLongClickListener() {           @Override           public boolean onLongClick(View v) {               qrcodeImg.setDrawingCacheEnabled(true);               Bitmap bitmap = Bitmap.createBitmap(qrcodeImg.getDrawingCache());               qrcodeImg.setDrawingCacheEnabled(false);               decodeQRCode(bitmap);               return true;           }       });
1234567891011121314151617181920212223242526272829303132
/**   * 解析二维码图片   *   * @param bitmap   要解析的二维码图片   */  public final Map<DecodeHintType, Object> HINTS = new EnumMap<>(DecodeHintType.class);  public void decodeQRCode(final Bitmap bitmap) {      new AsyncTask<Void, Void, String>() {          @Override          protected String doInBackground(Void... params) {              try {                  int width = bitmap.getWidth();                  int height = bitmap.getHeight();                  int[] pixels = new int[width * height];                  bitmap.getPixels(pixels, 0, width, 0, 0, width, height);                  RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);                  Result result = new MultiFormatReader().decode(new BinaryBitmap(new HybridBinarizer(source)), HINTS);                  return result.getText();              } catch (Exception e) {                  return null;              }          }          @Override          protected void onPostExecute(String result) {              Log.d("wxl", "result=" + result);              Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();          }      }.execute();  }

由于时间仓促,抽离的代码可能或多或少有些问题,细节待优化。
另外,ViewfinderView自定义属性参考了http://my.oschina.net/smuswc/blog/609413?fromerr=RgSd7WKf

源码

官方的例子和我自己的抽离出的代码都上传github了,地址:https://github.com/WuXiaolong/zxingSample


原文地址:http://www.cnblogs.com/soaringEveryday/p/4607438.html

0 0
原创粉丝点击