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

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

前言:

最近入职新公司,由于之前的哥们临时离职,走得很突然,所以没有任何交接和文档,临时顶上公司手表应用的上架,更换了新的密钥和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的方式安装到本地手表上,这里其实也是遇到了几个问题,都是在工作人员的指导下顺利完成,这里不得不说工作人员态度极好,回复也很快,基本上有问题都是远程全面指导,非常感谢!!

相关推荐
SRC_BLUE_1743 分钟前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道4 小时前
Android打包流程图
android
镭封5 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰4875 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛6 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二6 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫6 小时前
Android开发中的隐藏控件技巧
android
Winston Wood8 小时前
Android中Activity启动的模式
android
众乐认证8 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto
三杯温开水8 小时前
新的服务器Centos7.6 安卓基础的环境配置(新服务器可直接粘贴使用配置)
android·运维·服务器