华为鸿蒙手表开发之动态生成二维码

华为鸿蒙手表开发之动态生成二维码

前言:

最近入职新公司,由于之前的哥们临时离职,走得很突然,所以没有任何交接和文档,临时顶上公司手表应用的上架,更换了新的密钥和key之后重新测试功能和流程,基本上没啥大问题,华为那边的工作人员也测试通过了,但是说隐私政策页面有一点问题,内容有几个错误点,我检查了一下App中的隐私政策发现是本地写死的页面,于是询问华为的工作人员该如何修改,他们给出一个意见,用二维码生成一个页面,用户和测试人员扫码就可以加载对应的页面,而且这个url地址里面的内容是动态的,可以随意修改,不需要App频繁改动,对于后期的审核和上架基本上是一步到位,于是简单的学习了一下官方文档,百度查询了一下资料,生成了一个二维码界面。

1.新建一个隐私政策页面:

kotlin 复制代码
/**
 * @author:test
 * @date:2023/9/26 17:14
 * @description:隐私政策
 */
public class PrivacyPolicyQRCodeAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(PrivacyPolicyQRCodeSlice.class.getName());
    }
}

2.生成二维码及扫描页面:

步骤如下:

  • 初始化view: initIView()
  • 初始化二维码引擎:VisionManager.init(PrivacyPolicyQRCodeSlice.this, connectionCallback);
  • 二维码连接回调:ConnectionCallback connectionCallback = new ConnectionCallback()
  • 连接成功后生成二维码:createQRCode(qrCodeUrlTxt);
  • 在界面退出时销毁引擎:VisionManager.destroy();
kotlin 复制代码
package com.xxx.hwwear.slice;

import com.elvishew.xlog.XLog;
import com.yadea.hwwear.BuildConfig;
import com.yadea.hwwear.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Image;
import ohos.ai.cv.common.ConnectionCallback;
import ohos.ai.cv.common.VisionManager;
import ohos.ai.cv.qrcode.IBarcodeDetector;
import ohos.media.image.ImageSource;
import ohos.media.image.PixelMap;
import ohos.media.image.common.PixelFormat;

/**
 * @author:njb
 * @date:2023/9/26 17:14
 * @description:扫描二维码进入隐私政策页面
 */
public class PrivacyPolicyQRCodeSlice extends AbilitySlice {
    Image codeImage;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_service_protocol_qr_code);
        initView();
    }

    private void initView() {
        codeImage = (Image) findComponentById(ResourceTable.Id_imgQrCode);
    }

    @Override
    public void onActive() {
        super.onActive();
        VisionManager.init(PrivacyPolicyQRCodeSlice.this, connectionCallback);
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    @Override
    protected void onBackground() {
        super.onBackground();
        VisionManager.destroy();
    }

    ConnectionCallback connectionCallback = new ConnectionCallback() {
        @Override
        public void onServiceConnect() {
            String qrCodeUrlTxt = "https://developer.huawei.com/consumer/cn/harmonyos";
            //连接成功生成二维码
            createQRCode(qrCodeUrlTxt);
        }

        @Override
        public void onServiceDisconnect() {
            if (BuildConfig.DEBUG) {
                XLog.d("Vision onServiceDisconnect");
            }
        }
    };

    /**
     * 创建二维码
     *
     * @param barText 需要生成二维码的字符串
     */
    private void createQRCode(String barText) {
        //实例化接口,获取二维码侦测器
        IBarcodeDetector barcodeDetector = VisionManager.getBarcodeDetector(PrivacyPolicyQRCodeSlice.this);
        //定义码生成图像的尺寸
        final int SAMPLE_LENGTH = getLayoutParams().width;
        //根据图像的大小,分配字节流数组的空间
        byte[] byteArray = new byte[SAMPLE_LENGTH * SAMPLE_LENGTH * 4];
        //调用IBarcodeDetector的detect()方法,根据输入的字符串信息生成相应的二维码图片字节流
        barcodeDetector.detect(barText, byteArray, SAMPLE_LENGTH, SAMPLE_LENGTH);
        //释放侦测器
        barcodeDetector.release();
        //通过SourceOptions指定数据源的格式信息
        ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
        //定义图片格式
        srcOpts.formatHint = "image/png";
        //创建图片源
        ImageSource imgSource = ImageSource.create(byteArray, srcOpts);
        //创建图像解码选项
        ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();
        decodingOpts.desiredPixelFormat = PixelFormat.ARGB_8888;
        //通过图片源创建PixelMap
        PixelMap pMap = imgSource.createPixelmap(decodingOpts);
        //赋值到图片标签
        codeImage.setPixelMap(pMap);
        //释放资源
        barcodeDetector.release();
        imgSource.release();
        if (pMap != null) {
            pMap.release();
        }
        //断开与能力引擎的连接
        VisionManager.destroy();
    }
}

3.生成二维码界面布局:

kotlin 复制代码
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical">

    <Image
        ohos:id="$+id:imgQrCode"
        ohos:height="match_parent"
        ohos:width="match_parent"
        ohos:layout_alignment="center"/>

</DirectionalLayout>

4.点击隐私政策按钮跳转页面:

kotlin 复制代码
richText.addTouchEventListener((param1Component, param1TouchEvent) -> {
    Intent intent = new Intent();
    intent.setOperation((new Intent.OperationBuilder())
            .withBundleName(getBundleName())
            //隐私政策
            .withAbilityName(PrivacyPolicyQRCodeAbility.class.getName())
            .build());
    ProtocolAbilitySlice.this.startAbility(intent);
    return false;
},  29, 34);

5.配置页面:

复制代码
{
  "name": "com.xxx.hwwear.PrivacyPolicyQRCodeAbility",
  "description": "$string:qrcodeabilityslice_description",
  "icon": "$media:icon",
  "label": "$string:entry_QRCodeAbilitySlice",
  "launchType": "standard",
  "orientation": "unspecified",
  "type": "page"
},

6.实现的效果如下:

7.扫码后的效果截图如下:

8.总结:

这里是以华为鸿蒙OS应用开发官网举例,这里的url可以随意动态切换,如果有个接口能提供这个地址更好,当然一般这些都不会经常改动,里面的内容后台可以随时修改,对于App或者手表应用都值得推荐,使用简单方便,本文基本上都是从0开始开发的,由于之前是做Android开发的,而且使用的是旧的Java语法,基本上没有遇到大的问题,当然其中的小问题还是有的.这里不是讲解让大家去学习新语言,如果不是工作需要,我不会接触鸿蒙和学习这些,而是记录一下工作中遇到的实际问题,后面等我大致了解清楚后再进行分享,要不然盲目学习会令人头疼,学完没有项目实战也是白搭,不推荐大家学太多东西。我只是工作需要而已,打卡收工,关机睡觉。

下一篇讲解如何将鸿蒙手表应用线上包通过adb install的方式安装到本地手表上,这里其实也是遇到了几个问题,都是在工作人员的指导下顺利完成,这里不得不说华为的工作人员态度极好,回复也很快,基本上有问题都是远程全面指导,非常感谢!!

相关推荐
贾伟康19 分钟前
HarmonyOS API 26 嵌套 Navigation:getParent、父子栈边界与返回分发
harmonyos·arkts·navigation·嵌套路由·navpathstack
行者-全栈开发1 小时前
【鸿蒙心迹】多线程并发实战——TaskPool 与 Worker 选型与踩坑(HarmonyOS 7.x)
华为·harmonyos·多线程并发·worker·taskpool·线程通信·harmonyos 并发
OH_TPC3 小时前
@ohos/aki 源码解读(一):一行绑定背后,宏、模板与索引分发
harmonyos
贾伟康4 小时前
【解压时刻|13】HarmonyOS ArkTS 启动链路审计:从 EntryAbility、AppStore 到 Navigation 首屏
harmonyos·arkts·appstorage·应用启动·entryability
贾伟康5 小时前
【古诗词闯关|12】HarmonyOS ArkTS 单页组件拆分实战:降低题库、闯关与结果弹层耦合
harmonyos·arkts·状态管理·arkui·组件化
威哥爱编程7 小时前
模拟面试智能体开发实战 07:答完一题就点评一题,结构化输出给分建议,让每道题都变成复盘
python·agent·harmonyos
威哥爱编程7 小时前
模拟面试智能体开发实战 08:总评报告先过三道闸,防泄题防夸大防错建议,才敢发到候选人手上
python·agent·harmonyos
熊猫钓鱼>_>1 天前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos
KevinChaos1 天前
阳台小花园开发手记 05|HarmonyOS 7.0 互动卡片:动效进出衔接
华为·harmonyos