安卓集成华为HMS Scankit实现自定义扫码功能

本文介绍了如何在Android应用中集成华为HMS ScanKit,以实现自定义扫码功能。通过配置HMS Core SDK的Maven仓地址,添加依赖,处理权限,以及结合Zxing的ViewfinderView,创建扫描界面,最终实现了一个功能完整的扫码功能。
摘要由CSDN通过智能技术生成

实现扫码功能

使用的是集成华为扫描的SDK,UI界面借鉴的是谷歌官方的Zxing项目中的自定义view,两者结合实现。

先上效果图:
在这里插入图片描述

  1. 先在项目根级别(build.gradle)当中配置HMS Core SDK的Maven仓地址。
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}`

在这里插入图片描述
在这里插入图片描述
2. 在对应module的build.gradle(Module:app)中添加依赖

dependencies {
    implementation 'com.huawei.hms:scanplus:1.3.2.300'
}
  1. 在清单文件里面添加静态权限
 <!-- 读文件权限 -->
    <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 使用特性 -->
    <uses-feature android:name="android.hardware.camera" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <!-- 相机权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
  1. 还需要在代码中申请相机的动态权限
public static final int DEFINED_CODE = 222;
public static final int DECODE = 1;

//跳转到扫描界面的监听中调用
 requestPermission(DEFINED_CODE, DECODE);

 private void requestPermission(int requestCode, int mode) {
        ActivityCompat.requestPermissions(
                this,
                new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE},
                requestCode);
    }
    
 @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
      if (permissions == null || grantResults == null) {
            return;
        }
      if (grantResults.length < 2 || grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
            return;
        }
 
      //Customized View Mode  使用的是自定义扫码界面  所以这块权限请求成功后才跳转到扫码界面
      if (requestCode == DEFINED_CODE) {
            Intent intent = new Intent(this, CustomizedViewActivity.class);
            this.startActivityForResult(intent, REQUEST_CODE_DEFINE);
        }
    }


//此处是扫描界面处理完成的扫描结果回调
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != RESULT_OK || data == null) {
            return;
        }
  
      //Customized View
     if (requestCode == REQUEST_CODE_DEFINE) {
        HmsScan obj = data.getParcelableExtra(CustomizedViewActivity.SCAN_RESULT);
        if (obj != null) {
        //拿到扫描信息根据自己需求自行处理 
            Toast.makeText(this, obj.originalValue, Toast.LENGTH_SHORT).show();
        }
    }
    }

5.**扫描界面 **
xml显示:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.CustomizedViewActivity">
    <FrameLayout
        android:id="@+id/rim"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:layout_centerHorizontal="true"
            android:background="#FF000000"
            android:alpha="0.1" />

        <com.example.jianzhuapplication.view.ViewfinderView
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值