【GT-安卓应用开发之长按识别二维码】

前言:昨天写了一篇博客记录了一下ImageView长按实现图片的保存,在生活中使用微信的时候会发现长按图片,图片中如果含有二维码的话会弹出一个有“识别二维码”的弹窗,也就是说有无二维码弹出框是不一样的。今天,趁着午休的时间在保存图片demo的基础上进行了一下修改,实现简单的二维码识别功能。

        逻辑流程:用户长按图片—ImageView截图—判断有无二维码—提示

        关键代码:

        

img = (ImageView) findViewById(R.id.qrcode);
img.setDrawingCacheEnabled(true);
img.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(final View view) {
        Bitmap bitmap = ((ImageView) view).getDrawingCache();
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int[] data = new int[width * height];
        bitmap.getPixels(data, 0, width, 0, 0, width, height);
        RGBLuminanceSource source = new RGBLuminanceSource(width, height, data);
        BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
        QRCodeReader reader = new QRCodeReader();
        Result re = null;
        try {
            re = reader.decode(bitmap1);
        } catch (NotFoundException e) {
            e.printStackTrace();
        } catch (ChecksumException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        }
        if (re == null) {
            Toast.makeText(MainActivity.this,"没有找到二维码", Toast.LENGTH_SHORT).show();
        } else {
            String text = re.getText();
            Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
        }
        return true;
    }
});

        需要注意的是在使用getDrawingCache之前必须要调用setDrawingCacheEnabled,除此之外识别二维码是用的ZXing库,需要提前引入

        demo比较简单,附上地址

猜你喜欢

转载自blog.csdn.net/qq_17433217/article/details/83145302