美文网首页移动开发安卓开发学习Andriod收藏
2分钟教你做安卓单纯的二维码识别,不涉及实时取景扫描

2分钟教你做安卓单纯的二维码识别,不涉及实时取景扫描

作者: 机智的Harbor | 来源:发表于2017-06-13 02:37 被阅读108次

本文的目的只有一个,在两分钟之内教你做二维码识别,不涉及任何相机方面的实时识别,或是长按识别。
仅仅只是从图库选一张图片,然后做识别。

最终效果如下:

最终效果

本文用到了Github上面一个开源库,QR Code decoding library written in Java
此库使用*** GNU GENERAL PUBLIC LICENSE***协议,使用需要谨慎,发布的产品不能作为商业产品收费使用。

好了教程开始

下载他提供的jar包

包的位置 然后把它粘贴到工程的libs目录下

按Ctrl+Alt+Shift+S,打开Project Structure


选择添加jar包依赖 选中刚刚导入的包,然后OK

这时候就能在app模块的build.gradle中看见所示的compile了,忽略上一步,直接在这里敲上这么一句也是可以的


compile files('libs/qrcode.jar')

接下来,同步一下你的gradle文件,进入第二步

在需要的地方,使用你喜欢的方式获取到需要识别的二维码图片

这里使用ButterKnife,您使用findViewById当然也是一样的啦~

使用ButterKnife获取一张QR图
@OnClick(R.id.image_view_qr_code)
void loadQRCode() {
    Intent albumIntent = new Intent(Intent.ACTION_PICK);
    albumIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
    startActivityForResult(albumIntent, REQUEST_ALBUM);
}

在onActivityResult中处理获取来的图片

onActivityResult,通过data.getData()方法获取到二维码的Uri,交由ReadQRCodeTask去处理
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case REQUEST_ALBUM:
            if (resultCode == RESULT_OK) {
                Log.i(TAG, "onActivityResult: " + data.toString());
                Uri uri = data.getData();
                mQrCodeImageView.setImageURI(uri);
                new ReadQRCodeTask().execute(uri);
            }
            break;
        default:break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

这里还必须写一个类

用来做解码的适配,将Bitmap转化为一种QRCodeImage,做成内部类即可


这里还必须写一个类,用来做解码的适配,将Bitmap转化为一种QRCodeImage

这里使用了异步的任务处理

new ReadQRCodeTask().execute(uri);,关于这个类的使用,详细参考AsyncTask | Android Developers,看完就会懂的,很实用。

如果不想看的话,我简单的说几句:这个类的作用就是,“把事情分开做”,逻辑更清晰。在我们想要后台访问网络或是其他费事的操作的时候,更新UI用runOnUIThread的话,就会产生很多谜之tab,可读性较差,使用AsyncTask 可以有效避免这个问题,更有甚者,可以去了解一下RxJava、RxAndroid,这里不再赘述。

ReadQRCodeTask
private class ReadQRCodeTask extends AsyncTask<Uri, Void, String>{
    private static final String DECODE_FAILED = "decode_failed";
    private ProgressDialog progressDialog;
    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(getContext());
          progressDialog.setTitle("识别中");
        progressDialog.setMessage(getString(R.string.reading_qr_code));
        progressDialog.show();
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.setCancelable(false);
    }
    @Override
    protected String doInBackground(Uri... uris) {
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),
                    uris[0]);
        } catch (IOException e) {
            e.printStackTrace();
        }
        QRCodeDecoder decoder = new QRCodeDecoder();
        byte[] qrCodeContent;
        try {
            qrCodeContent = decoder.decode(new Image(bitmap));
        }catch (DecodingFailedException e){
            return DECODE_FAILED;
        }
        return new String(qrCodeContent);
    }
    @Override
    protected void onPostExecute(String s) {
        progressDialog.dismiss();
        Log.i(TAG, "onPostExecute: 读取结果是:"+s);
        if (s.equals(DECODE_FAILED)){
            Toast.makeText(getContext(), R.string.read_failed, Toast.LENGTH_SHORT).show();
            return;
        }
        mIdCodeEditText.setText(s.substring(s.lastIndexOf("/")+1));
        Toast.makeText(getContext(), R.string.read_succeed, Toast.LENGTH_SHORT).show();
    }
}

好啦教程到这里就差不多结束啦

相关文章

  • 2分钟教你做安卓单纯的二维码识别,不涉及实时取景扫描

    本文的目的只有一个,在两分钟之内教你做二维码识别,不涉及任何相机方面的实时识别,或是长按识别。仅仅只是从图库选一张...

  • ZBG注册交易教程

    第一步 下载ZBG和ZB两个交易所手机端APP,扫描下方二维码下载(安卓手机扫描安卓的二维码,苹果手机扫描苹果手机...

  • 安卓生成二维码教程

    1.简介 这是一篇安卓生成二维码的文章,文章中不涉及太多原理方面的问题,只是单纯的让读者知道如何生成二维码。 2....

  • 发票手机拍照识别sdk

    关键词:移动端发票识别 安卓发票识别 IOS发票识别 发票扫描识别 发票拍照识别 发票手机拍照识别sdk 财务最烦...

  • 发票拍照识别

    关键词:发票拍照识别 手机拍照识别 发票扫描识别 安卓手机拍照识别 ios手机拍照识别 无纸化办公的普及以及大中小...

  • 关于UIWebView长按识别二维码的问题

    前言 之前在应用中涉及到UIWebView长按识别二维码的问题,安卓那边在网上可以搜索到相关的代码实现,而我在网上...

  • iOS和安卓使用同一个二维码实现跳转下载链接

    最近公司的产品需求,希望iOS和安卓使用一个二维码,让扫描的机器自己识别操作系统实现跳转到相应的下载链接。比如iP...

  • QRCode-扫描二维码-识别图中二维码

    支持:打开相机扫描识别二维码、打开相册识别图中二维码、打开手电筒。 对扫描进行了简单的优化:原生的扫描快,但是识别...

  • 爱打卡教程

    1、扫描二维码注册并安装APP 安卓用户直接扫描上面二维码注册后根据提示安装即可 苹果用户:扫码注册后按下面步骤操...

  • iOS 二维码扫描、生成、识别 (swift3.0)

    一键集成二维码扫描、生成、识别 基于swift3.0 1.扫描二维码 设置扫描会话,图层和输入输出 开始扫描 扫描...

网友评论

  • Napsterwan:您好,请问你这个微信支持直接跳转支付页面吗?
    Napsterwan:好的,多谢!
    机智的Harbor:没有root权限或xposed框架支持是不能调到微信支付界面的

本文标题:2分钟教你做安卓单纯的二维码识别,不涉及实时取景扫描

本文链接:https://www.haomeiwen.com/subject/lrgrqxtx.html