二维码

package com.bw.qrcode.demo;

import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.Settings;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;
import me.iwf.photopicker.PhotoPicker;
import me.iwf.photopicker.PhotoPreview;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private TextView tvCreateQrcode;
    private TextView tvReadQrcode;
    private ImageView ivQrCode;
    private TextView  tvQrcode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initListener();
    }

    private void initView() {
        tvCreateQrcode = (TextView) findViewById(R.id.tvCreateQrcode);
        tvReadQrcode = (TextView) findViewById(R.id.tvReadQrcode);
        ivQrCode = (ImageView) findViewById(R.id.ivQrCode);
        tvQrcode = (TextView) findViewById(R.id.tvQrcode);
    }

    private void initListener() {
        tvCreateQrcode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO: 2019/11/1  生成二维码
                createQrCode();
            }
        });

        tvReadQrcode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO: 2019/11/1 解析从相册获取的二维码
                readQrCode();
            }
        });

        tvQrcode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //打开相册界面,这个界面是一个activity,跟我们自己写的activity没有任何区别
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent, 200);

            }
        });
    }

    //解析二维码
    private void readQrCode() {
        Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
        startActivityForResult(intent, 100);
    }

    //生成二维码
    private void createQrCode() {
        /**
         * 1、二维码的内容
         * 宽度
         * 高度
         * bitmap:二维码的logo
         */

        Bitmap mBitmap = CodeUtils.createImage("天王盖地虎", 400, 400, BitmapFactory.decodeResource(getResources(), R.mipmap.wanqiwen));
        ivQrCode.setImageBitmap(mBitmap);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 100) {
            onQrCodeResult(requestCode, resultCode, data);
        } else if (requestCode == 200) {
            onImageReuslt(requestCode, resultCode, data);
        }

    }

    //解析扫描的二维码
    private void onQrCodeResult(int requestCode, int resultCode, @Nullable Intent data) {
        /**
         * 处理二维码扫描结果
         */
        if (requestCode == 100) {
            //处理扫描结果(在界面上显示)
            if (null != data) {
                Bundle bundle = data.getExtras();
                if (bundle == null) {
                    return;
                }
                if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                    String result = bundle.getString(CodeUtils.RESULT_STRING);
                    Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
                    Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                }
            }
        }
    }

    //解析从相册获取的二维码
    private void onImageReuslt(int requestCode, int resultCode, @Nullable Intent data) {
        //获取选择的二维码图片
        if (requestCode == 200) {
            if (data != null) {
                Uri uri = data.getData();
                ContentResolver cr = getContentResolver();
                try {
                    Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片
                    ivQrCode.setImageBitmap(mBitmap);
                    String result;
                    Cursor cursor = this.getContentResolver().query(uri,
                            new String[]{MediaStore.Images.ImageColumns.DATA},//
                            null, null, null);
                    if (cursor == null) {
                        result = uri.getPath();
                    } else {
                            cursor.moveToFirst();
                            int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                            result = cursor.getString(index);
                        cursor.close();

                    }

                    //使用zxing去解析这张图片
                    CodeUtils.analyzeBitmap(result, new CodeUtils.AnalyzeCallback() {
                        @Override
                        public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
                            Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onAnalyzeFailed() {
                            Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                        }
                    });


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



}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值