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

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

前言:

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

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

scala 复制代码
/**
 * @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();
java 复制代码
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.生成二维码界面布局:

ini 复制代码
<?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.点击隐私政策按钮跳转页面:

scss 复制代码
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.配置页面:

bash 复制代码
{
  "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的方式安装到本地手表上,这里其实也是遇到了几个问题,都是在工作人员的指导下顺利完成,这里不得不说工作人员态度极好,回复也很快,基本上有问题都是远程全面指导,非常感谢!!

相关推荐
alexhilton1 小时前
务实的模块化:连接模块(wiring modules)的妙用
android·kotlin·android jetpack
ji_shuke1 小时前
opencv-mobile 和 ncnn-android 环境配置
android·前端·javascript·人工智能·opencv
sunnyday04263 小时前
Spring Boot 项目中使用 Dynamic Datasource 实现多数据源管理
android·spring boot·后端
幽络源小助理5 小时前
下载安装AndroidStudio配置Gradle运行第一个kotlin程序
android·开发语言·kotlin
inBuilder低代码平台5 小时前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐5 小时前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
白熊小北极5 小时前
Android Jetpack Compose折叠屏感知与适配
android
HelloBan5 小时前
setHintTextColor不生效
android
洞窝技术7 小时前
从0到30+:智能家居配网协议融合的实战与思考
android
QING6188 小时前
SupervisorJob子协程异常处理机制 —— 新手指南
android·kotlin·android jetpack