转:Android zxing(上)

二维码一般在项目都会用到,今天分享下我开发二维码的一些心得。

zxing介绍

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


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

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

zxing使用

添加依赖

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

扫描二维码

1
2
3
4
case R.id.qrcode_dencode: //扫描
intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
break;
1
2
3
4
5
6
7
8
9
@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();
       }
   }

生成二维码

1
2
3
4
5
6
7
8
9
case R.id.qrcode_encode: //生成
try {
       Bitmap mBitmap = QRCodeEncoder.encodeAsBitmap("http://wuxiaolong.me/", 300);
       qrcodeImg.setImageBitmap(mBitmap);

     } catch (Exception e) {
       e.printStackTrace();
     }
    break;

识别二维码

1
2
3
4
5
6
7
8
9
10
11
//长按图片识别二维码
       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;
           }
       });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
   * 解析二维码图片
   *
   * @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://wuxiaolong.me/2016/04/22/zxing/#rd?sukey=fa67fe3435f5c4be98836cf66dcb29ede88d6bfa41359bf2e61470ce9a423fafef157ff2b4dba387854f05c4d1efbbfe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值