当前位置: 首页 > news >正文

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

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

前言:

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

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

/*** @author:test* @date:2023/9/26 17:14* @description:隐私政策*/
public class PrivacyPolicyQRCodeAbility extends Ability {@Overridepublic 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();
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;@Overridepublic 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);}@Overridepublic void onActive() {super.onActive();VisionManager.init(PrivacyPolicyQRCodeSlice.this, connectionCallback);}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);}@Overrideprotected void onBackground() {super.onBackground();VisionManager.destroy();}ConnectionCallback connectionCallback = new ConnectionCallback() {@Overridepublic void onServiceConnect() {String qrCodeUrlTxt = "https://developer.huawei.com/consumer/cn/harmonyos";//连接成功生成二维码createQRCode(qrCodeUrlTxt);}@Overridepublic 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;//通过图片源创建PixelMapPixelMap pMap = imgSource.createPixelmap(decodingOpts);//赋值到图片标签codeImage.setPixelMap(pMap);//释放资源barcodeDetector.release();imgSource.release();if (pMap != null) {pMap.release();}//断开与能力引擎的连接VisionManager.destroy();}
}

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

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:alignment="center"ohos:orientation="vertical"><Imageohos:id="$+id:imgQrCode"ohos:height="match_parent"ohos:width="match_parent"ohos:layout_alignment="center"/></DirectionalLayout>

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

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

相关文章:

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

华为鸿蒙手表开发之动态生成二维码 前言&#xff1a; 最近入职新公司&#xff0c;由于之前的哥们临时离职&#xff0c;走得很突然&#xff0c;所以没有任何交接和文档&#xff0c;临时顶上公司手表应用的上架&#xff0c;更换了新的密钥和key之后重新测试功能和流程&#xff…...

2023-09-28 monetdb-databae的概念和作用-分析

摘要: 每个数据库对于db,schema以及user,role都有一套自己的设计, 不同数据库间对于相同名字的东西例如database和schema可以说南辕北辙, 例如mysql中schema其实是database的同义词. 本文分析monetdb的database的概念和作用 database的概念和作用: 和mysql的database完全不同…...

2024级199管理类联考之数学基础(上篇)

管理类考试介绍 管理综合200分,时间3小时 数学&#xff1a;75分/25题,是拉开差距的核心模块 问题求解题&#xff1a;15个,5选一条件充分性判断&#xff1a;10个,结合两个条件选择答案 条件一充分,条件二不充分&#xff1a;A条件一不充分,条件二充分&#xff1a;B条件一充分,条…...

RFID技术引领汽车零部件加工新时代

RFID技术的兴起引领了汽车零部件加工领域的新时代&#xff0c;作为一种利用无线电频率进行自动识别的技术&#xff0c;RFID技术能够快速、准确地识别物体并获取相关数据&#xff0c;在汽车零部件加工中&#xff0c;RFID技术具有重要的应用价值&#xff0c;可以提高生产效率、降…...

python中使用matplotlib绘图

一、背景 当我们在写python程序时&#xff0c;不可避免的需要将数据可视化&#xff0c;也就是绘制出数据的曲线图&#xff0c;以便我们更直观的观察数据间的变化&#xff0c;和方便对比。此时就要用到matplotlib库了。 matplotlib官方给出的定义是&#xff1a; 翻译过来也就是…...

Qt Creator 使用技巧

使用技巧 功能快捷键解释Switch Header/SourceF4在同名的头文件和源程序文件之间切换Follow Symbol Under CursorF2变量:跳转到声明;函数:声明和定义切换Refactor Rename Symbol Under CursorCtrlShiftR改名称&#xff0c;将替换所有用到这个符号的地方RefactorAdd Definition…...

来看看双阶段目标检测算法趴

&#x1f680; 作者 &#xff1a;“码上有钱” &#x1f680; 文章简介 &#xff1a;AI-目标检测算法 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac;简介 双阶段目标检测算法是一类深度学习算法&#xff0c;通常分为两个阶段来检测和识别图像中的…...

python利用matplotlib绘图,对于中文和负号不显示,显示方框“口口”完美解决办法!!

文章目录 一、问题展示二、问题分析三、解决办法四、结果展示 一、问题展示 二、问题分析 可以发现对中文&#xff0c;以及负号不显示。 三、解决办法 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [usimHei] # 显示中文 plt.rcParams[axes.unicode_mi…...

【数组及指针经典笔试题解析】

1.数组和指针笔试题 题目1 int main(){int a[5] { 1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5};int * ptr (int * )(&a 1);printf("%d&#xff0c;%d"&#xff0c;*(a 1)&#xff0c;*(ptr - 1));return 0;}图文解析&#xff1a; int * ptr …...

Transformer学习-self-attention

这里写自定义目录标题 Self-attentionMulti-head self-attention用self-attention解决其他问题 Self-attention 用Wq、Wk、Wv分别乘输入向量得到q、k、v向量 用每个q向量乘所有的k向量得到对应项的attention&#xff0c;即用每项的query向量去匹配所有的key向量&#xff0c;得…...

Spring Boot:利用JPA进行数据库的增改

目录 JPA介绍Service接口Service和Autowired示例代码 Dao数据库操作层Repository示例代码 控制器文件示例代码-增加增加成功示例代码-修改修改成功 JPA介绍 JPA&#xff08;Javaa Persistence API)一种用于持久化 Java 对象到关系型数据库的标准规范。它提供了一种统一的方式来…...

列表的增删改查和遍历

任务概念 什么是任务 任务是一个参数为指针&#xff0c;无法返回的函数&#xff0c;函数体为死循环不能返回任务的实现过程 每个任务是独立的&#xff0c;需要为任务分别分配栈称为任务栈&#xff0c;通常是预定义的全局数组&#xff0c;也可以是动态分配的一段内存空间&#…...

获取网卡上的IP、网关及DNS信息,获取最佳路由,遍历路由表中的条目(附源码)

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…...

保姆级 -- Zookeeper超详解

1. Zookeeper 是什么(了解) Zookeeper 是一个 分布式协调服务 的开源框架, 主要用来解决分布式集群中应用系统的一致性问题, 例如怎样避免同时操作同一数据造成脏读的问题. ZooKeeper 本质上是 一个分布式的小文件存储系统 . 提供基于类似于文件系统的目录树方式的数据存储, …...

【通意千问】大模型GitHub开源工程学习笔记(2)--使用Qwen进行推理的示例代码解析,及transformers的库使用

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…...

从0开始python学习-23.selenium 常见鼠标的操作

注意&#xff1a;必须创建一个事件链对象&#xff08;ActionChains&#xff09;&#xff1b;最后鼠标事件链完成之后一定要进行事务提交perform&#xff08;&#xff09;&#xff08;如果事件链不提交那么所有的鼠标事件都不会执行&#xff09; 1. 左键单击&#xff1a;click()…...

电气基础——电源、变压器、接触器、断路器、线缆

目录 1.电源 2.变压器 三项电和2相电的转换 3.接触器 4.断路器 5.线缆 1.电源 2.变压器 三项电和2相电的转换 三相电转为2相电 1.变压器 2.相位移转换器 3.电容器 两相电变不了三相电。但是两相电可以通过电容移相后带动三相电机 零线&#xff0c;地线N&#xff…...

步力宝科技爆款产品定位,开创智能物联网新商业

数据显示&#xff0c;中国处于 “亚健康”状态人口数量约占总人口的70%&#xff0c;亚健康是一种临界状态&#xff0c;指介于健康和疾病之间的状态。亚健康是一个动态演变的过程&#xff0c;既有向慢病发展的趋势&#xff0c;也能通过合理的干预使人体重返健康状态&#xff0c;…...

凉鞋的 Unity 笔记 105. 第一个通识:编辑-测试 循环

105. 第一个通识&#xff1a;编辑-测试 循环 在这一篇&#xff0c;我们简单聊聊此教程中所涉及的一个非常重要的概念&#xff1a;循环。 我们在做任何事情都离不开某种循环&#xff0c;比如每天的 24 小时循环&#xff0c;一日三餐循环&#xff0c;清醒-睡觉循环。 在学习一…...

Bug:elementUI样式不起作用、Vue引入组件报错not found等(Vue+ElementUI问题汇总)

前端问题合集&#xff1a;VueElementUI 1. Vue引用Element-UI时&#xff0c;组件无效果解决方案 前提&#xff1a; 已经安装好elementUI依赖 //安装依赖 npm install element-ui //main.js中导入依赖并在全局中使用 import ElementUI from element-ui Vue.use(ElementUI)如果此…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...

简单介绍C++中 string与wstring

在C中&#xff0c;string和wstring是两种用于处理不同字符编码的字符串类型&#xff0c;分别基于char和wchar_t字符类型。以下是它们的详细说明和对比&#xff1a; 1. 基础定义 string 类型&#xff1a;std::string 字符类型&#xff1a;char&#xff08;通常为8位&#xff09…...

英国云服务器上安装宝塔面板(BT Panel)

在英国云服务器上安装宝塔面板&#xff08;BT Panel&#xff09; 是完全可行的&#xff0c;尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎&#xff0c;虽然官方主要面向中国大陆…...

性能优化中,多面体模型基本原理

1&#xff09;多面体编译技术是一种基于多面体模型的程序分析和优化技术&#xff0c;它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象&#xff0c;通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中&#xff0…...