Android快速实现扫码功能

他来了,他来了,他带着YXing走来了。
YXing 集成了CameraX + zxing, 简洁调用,功能完善,自定义扫码界面,再也不用像以前一样cv一堆冗余的Camera代码进项目了。

Android快速实现扫码功能_第1张图片

怎么集成:
1.在根目录的build.gradle中添加jitpack依赖:

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

2.在project的build.gradle中添加YXing依赖:

  implementation 'com.github.amggg:YXing:V1.0.2'

功能:
1、扫码功能。
2、生成二维码和带logo二维码 (大小圆角可设置)。
3、识别相册内二维码图片。

注意事项:
1.在进入扫码界面前, 自行动态请求相机权限。
2.minSdk >= 21 (android5.0 及以上)

如何使用:
1.简单调用:

  ScanCodeConfig.create(MainActivity.this)
                                    //设置扫码页样式 ScanStyle.NONE:无  ScanStyle.QQ :仿QQ样式   ScanStyle.WECHAT :仿微信样式    ScanStyle.CUSTOMIZE : 自定义样式
                                    .setStyle(style)
                                    //扫码成功是否播放音效  true : 播放   false : 不播放
                                    .setPlayAudio(false)
                                    .buidler()
                                    //跳转扫码页   扫码页可自定义样式
                                    .start(ScanCodeActivity.class);

获取扫码结果:

  @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //接收扫码结果
        if(resultCode == RESULT_OK && requestCode == ScanCodeConfig.QUESTCODE && data != null){
            Bundle extras = data.getExtras();
            if(extras != null){
                String code = extras.getString(ScanCodeConfig.CODE_KEY);
                tvCode.setText(String.format("%s%s", "结果: " , code));
            }
        }
    }

内置两种样式可供使用, 通过setStyle方法 设置。
1、仿 QQ
Android快速实现扫码功能_第2张图片

2、仿微信
Android快速实现扫码功能_第3张图片

通过设置style 为 ScanStyle.CUSTOMIZE 进行自定义样式设计:

   ScanCodeConfig.create(MainActivity.this)
                                    //设置扫码页样式 ScanStyle.NONE:无  ScanStyle.QQ :仿QQ样式   ScanStyle.WECHAT :仿微信样式  ScanStyle.CUSTOMIZE : 自定义样式
                                    .setStyle(ScanStyle.CUSTOMIZE)
                                    //扫码成功是否播放音效  true : 播放   false : 不播放
                                    .setPlayAudio(true)
                                    //设置音效音频
                                    .setAudioId(R.raw.beep)
                                    
                                    //以下配置 在style为 ScanStyle.CUSTOMIZE 时生效
                                    //设置扫码框位置  left : 边框左边位置   top : 边框上边位置   right : 边框右边位置   bottom : 边框下边位置   单位/dp
                                    .setScanRect(new ScanRect(50, 200, 300, 450))
                                    //是否显示边框上四个角标 true : 显示  false : 不显示
                                    .setShowFrame(true)
                                    //设置边框上四个角标颜色
                                    .setFrameColor(R.color.whilte)
                                    //设置边框上四个角标圆角  单位 /dp
                                    .setFrameRaduis(2)
                                    //设置边框上四个角宽度 单位 /dp
                                    .setFrameWith(4)
                                    //设置边框上四个角长度 单位 /dp
                                    .setFrameLenth(15)
                                    //设置是否显示边框外部阴影 true : 显示  false : 不显示
                                    .setShowShadow(true)
                                    //设置边框外部阴影颜色
                                    .setShaowColor(R.color.black_tran30)
                                    //设置扫码条图片
                                    .setScanBitmapId(R.mipmap.scan_wechatline)
                                    //
                                    .buidler()
                                    //跳转扫码页   扫码页可自定义样式
                                    .start(MyScanActivity.class);

Android快速实现扫码功能_第4张图片

由于扫码界面一般会有很多不同的业务逻辑,所以可以根据需求自定义扫码界面:

自定义扫码界面流程:
1.新建Activity 继承 ScanCodeActivity

public class MyScanActivity extends ScanCodeActivity 

2.重写getLayoutId() 和 initData() 方法
getLayoutId返回你自己定义的布局文件id
initData() 和平常一样 初始化数据 监听等等

public class MyScanActivity extends ScanCodeActivity {

    private AppCompatButton btnOpenFlash;

    @Override
    public int getLayoutId() {
        return R.layout.activity_myscan;
    }

    @Override
    public void initData() {
        super.initData();
        btnOpenFlash = findViewById(R.id.btn_openflash);

        btnOpenFlash.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MyScanActivity.this, "打开闪光灯", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

3.布局文件中先将下面代码复制进去:


    
    


PreviewView是扫码界面, 下面可以任意添加自己的布局了:
下面尝试一下:



    

    

    


4.start()方法参数 替换成自定义的Activity:

ScanCodeConfig.create(MainActivity.this)
                                    //设置扫码页样式 ScanStyle.NONE:无  ScanStyle.QQ :仿QQ样式   ScanStyle.WECHAT :仿微信样式
                                    .setStyle(style)
                                    //扫码成功是否播放音效  true : 播放   false : 不播放
                                    .setPlayAudio(true)
                                    .buidler()
                                    //跳转扫码页   扫码页可自定义样式
                                    .start(MyScanActivity.class);

预览一下:
Android快速实现扫码功能_第5张图片

除了扫码功能外,还可以生成二维码:
1.单独的二维码:

Bitmap bitmap = ScanCodeConfig.createQRCode("star");
                ivCode.setImageBitmap(bitmap);

2.带logo的二维码:

Bitmap bitmap = ScanCodeConfig.createQRcodeWithLogo("star", BitmapFactory.decodeResource(getResources(), R.mipmap.timg));
                ivCode.setImageBitmap(bitmap);

二维码宽高, logo宽高, 圆角都可以自行设置:

/**
     * 生成二维码
     *
     * @param text 需要生成二维码的文字、网址等
     * @param size 需要生成二维码的大小()
     * @return bitmap
     */
    public static Bitmap createQRCode(String text, int size) {
 /** 生成带logo 二维码
     * @param text  文字
     * @param size   二维码大小 1 :1
     * @param logo   logo
     * @param logoWith logo宽
     * @param logoHigh  logo高
     * @param logoRaduisX  logo x圆角
     * @param logoRaduisY  logo y圆角
     * @return
     */
    public static Bitmap createQRcodeWithLogo(String text, int size, Bitmap logo, int logoWith, int logoHigh, float logoRaduisX, float logoRaduisY){

除了生成二维码, 从相册识别二维码也是必不可少的:
调用以下方法, 把选中的图片uri传进去 就可以获取到二维码的内容了。。

 /**
     * 解码uri二维码图片
     * @return
     */
    public static String scanningImage(Activity mActivity, Uri uri) {

打完 收工~~~

github 内有app 下载链接
Android快速实现扫码功能_第6张图片

技术不强, 重在整理, 不喜勿喷。

附上github链接https://github.com/amggg/YXing

star star star

你可能感兴趣的:(android,java,android,studio,flutter,html)