华为扫描二维码

统一扫码服务(Scan Kit)

统一扫码服务(Scan Kit)的业务介绍涵盖了多方面的内容,包括其提供的能力、支持的设备、适用的场景等。
重要亮点

  • 服务能力:提供全球主流制式二维码和条形码的扫描、识别和生成能力,在计算机视觉领域有出色表现,对复杂扫码场景做了特定识别优化,大幅提升扫码成功率。
  • 系统支持:支持 Android 和 iOS 系统集成,Android 系统集成后具备横屏扫码能力。
  • 支持设备:Android 方面,华为手机、平板及非华为手机在特定版本可集成;iOS 手机在特定版本可集成。
  • 场景应用:支持十三种全球主流的码制式识别和生成以及多功能码识别,提供多种调用模式,可根据应用场景选择。
  • 码值处理:Android 和 iOS 下可直接返回码的原始内容,也能对特定格式编码的码进行分析提取结构化数据。
/*
 * Copyright 2020. Huawei Technologies Co., Ltd. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0 
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// 定义包名
package com.example.scankitdemo;

// 导入所需的Android库和华为HMS Scan Kit相关的类
import android.Manifest;
// ... 其他导入 ...

// MainActivity类继承自Android的Activity类
public class MainActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback {

    // 定义请求代码常量
    // ... 常量定义 ...

    // onCreate方法在活动创建时被调用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 请求无标题窗口特性
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 设置布局
        setContentView(R.layout.activity_mwcmain);

        // 根据设备方向设置不同的布局
        // ... 屏幕方向检测和布局设置 ...

        // 设置沉浸式状态栏
        // ... 沉浸式状态栏设置代码 ...
    }

    // 定义按钮点击事件处理方法
    // ... 按钮点击事件处理方法 ...

    // 权限请求方法
    private void requestPermission(int requestCode, int mode) {
        // ... 权限请求代码 ...
    }

    // 解码权限请求方法
    private void decodePermission(int requestCode) {
        // ... 解码权限请求代码 ...
    }

    // 生成权限请求方法
    private void generatePermission(int requestCode) {
        // ... 生成权限请求代码 ...
    }

    // 权限请求结果回调方法
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // ... 权限请求结果处理 ...
    }

    // 活动结果回调方法
    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // ... 活动结果处理 ...
    }
}

一个Android应用程序的一部分,它实现了使用华为的HMS Scan Kit进行二维码和条形码扫描的功能。下面是对代码的分析:

  1. 版权声明:代码的开头是一个标准的Apache License 2.0版权声明,表明该文件遵循Apache License 2.0。

  2. 包名package com.example.scankitdemo; 定义了该Java类的包名。

  3. 导入:代码中导入了必要的Android库和华为HMS Scan Kit相关的类。

  4. 类定义public class MainActivity extends Activity 定义了一个名为MainActivity的类,它继承自Android的Activity类。

  5. 请求窗口特性requestWindowFeature(Window.FEATURE_NO_TITLE); 请求一个没有标题栏的窗口。

  6. 布局设置setContentView(R.layout.activity_mwcmain); 设置了活动的布局。

  7. 屏幕方向检测:代码检查设备的屏幕方向,并根据方向设置不同的布局。

  8. 沉浸式状态栏:设置了沉浸式状态栏,使得状态栏和导航栏在视觉上与应用内容融为一体。

  9. 按钮点击事件:定义了多个按钮点击事件,如loadScanKitBtnClicknewViewBtnClick等,这些方法用于触发不同的扫描模式。

  10. 权限请求requestPermission方法根据不同的模式请求相应的权限,如相机权限、读取存储权限等。

  11. 权限回调onRequestPermissionsResult方法处理权限请求的结果,并根据不同的请求代码执行相应的操作。

  12. 结果回调onActivityResult方法处理从其他活动返回的结果,如扫描结果,并根据结果启动新的活动。

  13. 扫描模式:代码支持多种扫描模式,包括默认视图模式、自定义视图模式、位图模式、多处理器同步和异步模式。

  14. 二维码生成generateQRCodeBtnClick方法用于触发二维码生成功能。

  15. API调用:使用了华为HMS Scan Kit的API,如ScanUtil.startScanHmsScanAnalyzerOptions等,来进行二维码和条形码的扫描。

  16. 结果处理:扫描完成后,结果会被传递到DisPlayActivityDisPlayMulActivity等活动,用于展示扫描结果。

演示提供了四种模式,以适应不同情况下的代码扫描能力。

  • Default View

该应用程序直接调用 HUAWEI Scan Kit 的扫码功能,并通过异步回调 API 获取扫描结果。可以使用设备相机,也可以通过导入的图像来扫描条形码。

代码位置:example/scankitdemo/MainActivity.java

  • Customized View

此应用程序直接构建 RemoteView,并借助异步回调 API 来获取扫描成果。能够运用设备相机抑或通过导入的图像对条形码进行扫描。

代码位置:example/scankitdemo/DefinedActivity.java

  • Bitmap API

该应用程序直接通过位图API传递位图,并通过API获得扫描结果。
在您的应用中,您可以调用相机API或导入本地图像以获得位图,然后调用HUAWEI Scan Kit的位图API来解码位图。

代码位置:example/scankitdemo/CommonActivity.java
example/scankitdemo/CommonHandler.java

  • MultiProcessor API

该应用程序使用与HUAWEI ML Kit相同的技术,通过MultiProcessor
API传递帧数据以进行解码,并检测条形码以及诸如面部。

代码位置:example/scankitdemo/CommonActivity.java
example/scankitdemo/CommonHandler.java

参考资料

华为文档

华为统一扫码服务Android示例代码

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要在Android Studio中使用华为扫描库实现二维码识别,您需要按照以下步骤进行操作: 1. 在项目的build.gradle文件中添加华为Maven库的地址,具体如下: ``` repositories { maven { url 'https://developer.huawei.com/repo/' } } ``` 2. 在app的build.gradle文件中添加依赖项,包括华为扫描库、华为基础服务和权限申请等,具体如下: ``` dependencies { implementation 'com.huawei.hms:scan:3.0.0.300' implementation 'com.huawei.hms:base:5.0.0.300' implementation 'com.huawei.hms:location:5.0.0.301' implementation 'com.huawei.hms:maps:5.0.0.300' implementation 'com.huawei.hms:network-common:5.0.0.300' implementation 'com.huawei.hms:network-grs:5.0.0.300' implementation 'com.huawei.hms:network-ml:5.0.0.300' implementation 'com.huawei.hms:network-ml-face:5.0.0.300' implementation 'com.huawei.hms:network-ml-translate:5.0.0.300' implementation 'com.huawei.hms:network-ml-textimagesuperresolution:5.0.0.300' implementation 'com.huawei.hms:network-ml-handkeypointdetection:5.0.0.300' implementation 'com.huawei.hms:network-ml-skeleton:5.0.0.300' implementation 'com.huawei.hms:network-ml-landmark:5.0.0.300' implementation 'com.huawei.hms:network-ml-document:5.0.0.300' implementation 'com.huawei.hms:network-ml-gcr:5.0.0.300' implementation 'com.huawei.hms:network-ml-face3d:5.0.0.300' implementation 'com.huawei.hms:network-ml-imagepixelization:5.0.0.300' implementation 'com.huawei.hms:network-ml-digitalinkrecognition:5.0.0.300' implementation 'com.huawei.hms:network-ml-handkeypoint:5.0.0.300' implementation 'com.huawei.hms:network-ml-classification:5.0.0.300' implementation 'com.huawei.hms:network-ml-aft:5.0.0.300' implementation 'com.huawei.hms:network-ml-textimagesuperresolution2:5.0.0.300' implementation 'com.huawei.hms:network-ml-imagecategorization:5.0.0.300' implementation 'com.huawei.hms:network-ml-imagetranslation:5.0.0.300' implementation 'com.huawei.hms:network-ml-semanticsegmentation:5.0.0.300' implementation 'com.huawei.hms:network-ml-automaticimageretouching:5.0.0.300' implementation 'com.huawei.hms:network-ml-objectdetection:5.0.0.300' implementation 'com.huawei.hms:network-ml-tts ### 回答2: 要在Android Studio中使用华为扫描库来实现二维码识别,需要按照以下步骤进行配置和开发。 首先,在项目的build.gradle文件中添加华为扫描库的依赖。可以在华为开发者中心下载相关的AAR文件。在dependencies块中添加如下代码: ``` implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation files('libs/hms-Scan-2.0.5.331.aar') implementation 'com.huawei.hms:scan:2.0.5.331' ``` 然后,在AndroidManifest.xml文件中添加相关权限和组件。在<manifest>标签下添加如下代码: ``` <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <application ...> <activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" /> </application> ``` 接下来,在需要进行二维码扫描的Activity中,初始化扫描库并注册回调。可以创建一个ScanUtil类,添加如下代码: ``` public class ScanUtil { private ScanUtil() { } public static void startScan(Activity activity, int requestCode) { HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE).create(); ScanUtil.startScan(activity, requestCode, options); } private static void startScan(Activity activity, int requestCode, HmsScanAnalyzerOptions options) { ScanUtil.startScan(activity, requestCode, options.build()); } private static void startScan(Activity activity, int requestCode, HmsCustomizedViewOptions options) { ScanUtil.startScan(activity, requestCode, options.build()); } private static void startScan(Activity activity, int requestCode, ScanRequest scanRequest) { ScanUtil.startScan(activity, requestCode, scanRequest, null); } private static void startScan(Activity activity, int requestCode, ScanRequest scanRequest, HmsCustomizedViewOptions options) { ScanUtil.startScan(activity, requestCode, scanRequest, options, null); } private static void startScan(Activity activity, int requestCode, ScanRequest scanRequest, HmsCustomizedViewOptions options, AsyncCallback callback) { if (activity == null) { Log.e("ScanUtil", "Activity cannot be null!"); return; } SafeCtrProvider.getInstance().setScanRequest(scanRequest); Intent intent = new Intent(activity, ScanKitActivity.class); intent.putExtra(ScanConstants.CHANNEL_NAME_CAMERA_SCAN_TYPE, ScanConstants.CONTINUOUS_MODE); intent.putExtra(ScanConstants.CAMERA_SCAN_TYPE_ERROR_TIP, ScanConstants.NO_MATCHED_CAMERA_SCAN_TYPE); intent.putExtra(ScanConstants.CONTINUOUS_MODE_SCAN_HINT_TEXT, activity.getResources().getString(R.string.scan_text)); intent.putExtra(ScanConstants.TOP_MASK_COLOR, activity.getResources().getColor(R.color.activity_theme_color)); intent.putExtra(ScanConstants.BOTTOM_MASK_COLOR, activity.getResources().getColor(R.color.activity_theme_color)); intent.putExtra(ScanConstants.BACK_BTN_COLOR, activity.getResources().getColor(R.color.white)); intent.putExtra(ScanConstants.LIGHTING_BTN_IMAGE_ID, R.drawable.activity_qr_scan_code_flash_light_off); intent.putExtra(ScanConstants.BUNDLE_KEY_CUSTOMIZED_VIEW, options); activity.startActivityForResult(intent, requestCode); } } ``` 最后,在需要进行二维码扫描的Activity中调用ScanUtil的startScan方法,实现二维码扫描功能。例如: ``` public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE_SCAN = 101; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button scanButton = findViewById(R.id.scan_button); scanButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ScanUtil.startScan(MainActivity.this, REQUEST_CODE_SCAN); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK && data != null) { HmsScan hmsScanResult = data.getParcelableExtra(ScanKitActivity.SCAN_RESULT); if (hmsScanResult != null) { String result = hmsScanResult.getOriginalValue(); // 处理扫描结果 Toast.makeText(MainActivity.this, "扫描结果:" + result, Toast.LENGTH_SHORT).show(); } } } } ``` 以上就是使用华为扫描库在Android Studio中实现二维码识别的基本步骤和代码。根据实际需求可能会有所调整,可以根据华为扫描库的开发文档进行更详细的配置和开发。 ### 回答3: 要在Android Studio中使用华为扫描库来实现二维码识别,需要按照以下步骤进行操作: 1. 在项目的build.gradle文件中,添加华为扫描库的依赖。具体操作是在dependencies中添加如下代码: ``` implementation 'com.huawei.hms:scan:5.3.1.302' ``` 2. 在需要使用二维码识别的活动中,添加用于扫描的按钮和二维码结果展示的TextView。 3. 在活动的Java文件中,导入华为扫描库的相关类。添加如下代码: ``` import com.huawei.hms.ml.scan.HmsScan; ``` 4. 在活动的Java文件中,添加用于处理二维码扫描结果的代码。具体的步骤如下: - 创建扫描器对象:在活动的onCreate方法中添加如下代码: ``` HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE, HmsScan.DATAMATRIX_SCAN_TYPE).create(); MLAnalyzer mlAnalyzer = MLAnalyzerFactory.getInstance().getHmsScanAnalyzer(options); ``` - 打开相机进行扫描:在扫描按钮的点击事件中添加如下代码: ``` startActivityForResult(new Intent(this, ScanKitActivity.class), REQUEST_CODE_SCAN); ``` - 处理扫描结果:在活动的onActivityResult方法中添加如下代码: ``` if (requestCode == REQUEST_CODE_SCAN && data != null) { if (data.getParcelableExtra(ScanKitActivity.SCAN_RESULT) != null) { Parcelable[] results = data.getParcelableArrayExtra(ScanKitActivity.SCAN_RESULT); for (Parcelable result : results) { if (result instanceof HmsScan) { HmsScan hmsScan = (HmsScan) result; TextView textView = findViewById(R.id.resultTextView); textView.setText(hmsScan.getOriginalValue()); } } } } ``` 5. 在AndroidManifest.xml文件中,添加相机和相册的权限。具体操作是在manifest标签下添加如下代码: ``` <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 6. 完成以上步骤后,即可在华为设备上使用华为扫描库实现二维码识别功能。 需要注意的是,使用华为扫描库需要保证项目中的Gradle插件版本必须是3.6.0或更高,并且需要在华为开发者联盟官网注册并创建应用,获取到相应的agconnect-services.json文件,在项目的app目录下添加该文件以配置华为移动服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布说在见

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

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

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

打赏作者

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

抵扣说明:

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

余额充值