Android中实现获取相册中的图片扫描二维码的功能

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到网站

前言:自己遇到了这样一个需求,所以把这个记录一下,后期再用到,直接拿来用就行了。
1.写相册按钮的监听事件,用ACTION_GET_CONTENT获取所有本地的图片。
Intent.ACTION_GET_CONTENT必须设置setType(“image/*”)表示返回的数据类型,否则会报,android.content.ActivityNotFoundException异常。

//打开相册
        iv_capture_photo=findViewById(R.id.iv_capture_photo);
        iv_capture_photo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
                    intent.setType("image/*");
                    startActivityForResult(intent,REQUEST_CODE_SCAN);
            }
        });

2.用onActivityResult()将获取的返回数据交给显示的页面去处理

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode==RESULT_OK){
            switch (requestCode){
                case REQUEST_CODE_SCAN:
                    handleAlbumPic(data);  //方法
                    break;
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

3.创建handleAlbumPic()方法,处理选择的图片,将获取的值,传给扫描之后显示的界面

	/**
     * 处理选择的图片
     * @param data
     */
private void handleAlbumPic(Intent data) {
        final Uri uri = data.getData();
        Result result =scanningImage(uri);  //scanningImage()方法,对获取的图片进行扫描
        if (result!=null){
            Toast.makeText(this, "扫描成功", Toast.LENGTH_SHORT).show();
            //使用返回信息
            Intent intent = new Intent(this, DevCodeAccessActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("devcode", String.valueOf(result));
            intent.putExtras(bundle);
            startActivity(intent, bundle);
            finish();
        }else {
            Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();
        }
    }

4.创建scanningImage()方法,去获取图片进行扫描。

	/**
     * 对获取的图片进行扫描
     * @param uri
     * @return
     */
    private Result scanningImage(Uri uri) {
        if (uri == null) {
            return null;
        }
        Hashtable<DecodeHintType, String> hints = new Hashtable<>();
        hints.put(DecodeHintType.CHARACTER_SET, "UTF8"); //设置二维码内容的编码


        scanBitmap=BitmapUtil.decodeUri(this,uri,500,500);
        RGBLuminacnce source=new RGBLuminacnce(scanBitmap);
        BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
        QRCodeReader reader = new QRCodeReader();
        try {
            return reader.decode(bitmap1, hints);
        } catch (NotFoundException e) {
            e.printStackTrace();
        } catch (ChecksumException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        }
        return null;
    }

该方法中RGBLuminacnce和BitmapUtil两个实体类,没在本文中写出,需要的可以私信我,以上仅作为记录学习,总结!
有任何问题可以在评论区指出,一起学习,共同进步,奔向自己的未来!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值