HarmonyOS NEXT 实战之元服务:静态案例效果---电台推荐
背景:
前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考
先上本期效果图 ,里面图片自行替换

效果图1完整代码案例如下:
- Index
import { authentication } from '@kit.AccountKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { TypeCommonItem } from './TypeCommonItem';@Entry
@ComponentV2
struct Index {build() {Column() {Text($r('app.string.EntryAbility_label')).fontSize(20)List() {ForEach(['喜马拉雅:有声书大全电台','荔枝 FM:音乐故事电台','蜻蜓 FM:新闻资讯早班车电台','企鹅 FM:情感治愈谈心电台','网易云音乐电台:小众音乐分享站','懒人听书:国学经典诵读电台'], (item: string) => {ListItem() {TypeCommonItem({ title: item })}})}}.alignItems(HorizontalAlign.Start).height('100%').padding(8).width('100%').margin({ top: 40 })}aboutToAppear() {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');this.loginWithHuaweiID();}/*** Sample code for using HUAWEI ID to log in to atomic service.* According to the Atomic Service Review Guide, when a atomic service has an account system,* the option to log in with a HUAWEI ID must be provided.* The following presets the atomic service to use the HUAWEI ID silent login function.* To enable the atomic service to log in successfully using the HUAWEI ID, please refer* to the HarmonyOS HUAWEI ID Access Guide to configure the client ID and fingerprint certificate.*/private loginWithHuaweiID() {// Create a login request and set parameterslet loginRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();// Whether to forcibly launch the HUAWEI ID login page when the user is not logged in with the HUAWEI IDloginRequest.forceLogin = false;// Execute login requestlet controller = new authentication.AuthenticationController();controller.executeRequest(loginRequest).then((data) => {let loginWithHuaweiIDResponse = data as authentication.LoginWithHuaweiIDResponse;let authCode = loginWithHuaweiIDResponse.data?.authorizationCode;// Send authCode to the backend in exchange for unionID, session}).catch((error: BusinessError) => {hilog.error(0x0000, 'testTag', 'error: %{public}s', JSON.stringify(error));if (error.code == authentication.AuthenticationErrorCode.ACCOUNT_NOT_LOGGED_IN) {// HUAWEI ID is not logged in, it is recommended to jump to the login guide page}});}
}
- TypeCommonItem
@Extend(Image)
function imageExtend(width: Length, height: Length) {.width(width).height(height)
}@Preview
@ComponentV2
export struct TypeCommonItem {@Param title: string = ''build() {Column() {Row() {// CheckBoxSquare({// select: true, onChange: (value) => {// ToastUtil.showToast(`${value}`)// }// })Column() {Text(this.title)RelativeContainer() {Text(this.getjieshao(this.title) + '').fontSize(13).fontColor('#222222').maxLines(3).lineHeight(18).textOverflow({ overflow: TextOverflow.Ellipsis }).alignRules({left: { anchor: '__container__', align: HorizontalAlign.Start },right: { anchor: 'stack', align: HorizontalAlign.Start }}).id('title').padding(8)Stack() {Image($r('app.media.diantaituijian')).width(48).height(48).position({ x: 30, y: 12 })Image($r('app.media.startIcon')).imageExtend(21, 19)}.alignContent(Alignment.TopEnd).width(108).height(72).backgroundColor('#F2F3F7').borderRadius(4).alignRules({right: { anchor: '__container__', align: HorizontalAlign.End }}).id('stack').offset({ x: -8, y: 8 })Row() {Text(generateRandomDate()).fontSize(11).fontColor('#505050')}.justifyContent(FlexAlign.SpaceBetween).width('100%').alignRules({left: { anchor: '__container__', align: HorizontalAlign.Start },bottom: { anchor: '__container__', align: VerticalAlign.Bottom },right: { anchor: '__container__', align: HorizontalAlign.End }}).id('row_author_avatar').offset({ x: 10, y: -10 }).padding({ right: 20 })}.width('100%').height(90).border({ width: 1, color: '#56DFB6', radius: 8 }).margin({ top: 8, bottom: 4 })Row() {Text(generateRandomDate()).fontSize(11).fontColor('#505050')Text(generateFiveCharacterRandomString()).fontSize(11).fontColor("#5090F1").margin({ left: 12, right: 12 })Image($r('app.media.startIcon')).width(16).borderRadius(8)Text(generateFiveCharacterRandomString()).fontSize(11).fontColor('#505050').margin({ left: 4, right: 4 })Image($r('app.media.startIcon')).imageExtend(44, 17)Blank()Image($r('app.media.ic_item_more')).width(16)}.width('100%').height(40)}.width('100%').layoutWeight(1)}.alignItems(VerticalAlign.Top).margin({ top: 12 })Divider()}.width('100%').padding({ left: 12, right: 12 })// .height('100%').backgroundColor(Color.White)}private getjieshao(title: string) {if (title == "喜马拉雅:有声书大全电台") {return '介绍:这是一个有声书爱好者的宝藏电台。这里汇聚了各种类型的有声书籍,涵盖古今中外的经典名著、畅销小说、历史传记、科幻奇幻等多个领域。无论是想重温《红楼梦》的细腻情感,还是跟随侦探在悬疑小说中抽丝剥茧,亦或是在科幻世界里畅想未来,这个电台都能满足你的需求。主播们用富有感染力的声音,将书中的情节生动地展现出来,让你在无法阅读书籍的时候,比如开车、做家务或者睡前,都能通过听书的方式沉浸在知识与故事的海洋中。'}if (title == "荔枝 FM:音乐故事电台") {return '介绍:在这个电台,音乐与故事完美交融。每一期节目都会围绕一首或几首歌曲展开一个温暖、感人、励志或者充满回忆的故事。也许是歌手创作歌曲背后的艰辛历程,也许是听众分享的一段与某首歌紧密相连的爱情、友情故事。当悠扬的旋律响起,搭配上深情的讲述,就像一杯热咖啡,在疲惫的生活中给你带来慰藉和感动,让你在聆听音乐的同时,也能感受到人性的美好和生活的多彩。'}if (title == "蜻蜓 FM:新闻资讯早班车电台") {return '介绍:每天清晨,这个电台就像一位可靠的信息使者,为你带来最新鲜、最全面的新闻资讯。它涵盖了国内外的政治、经济、文化、体育等各个领域的新闻事件,并且以简洁明了、重点突出的方式进行播报。主播们声音沉稳、节奏适中,让你在洗漱、吃早餐或者上班路上就能轻松掌握世界动态,开启一天充实的生活,帮助你在快节奏的社会中紧跟时代步伐,不会错过任何重要的消息。'}if (title == "企鹅 FM:情感治愈谈心电台") {return '介绍:当你在生活中遇到挫折、情绪低落或者感到迷茫的时候,这个电台就是你的心灵避风港。主播们用温柔的声音,和你分享关于爱情、亲情、友情等各种情感问题的见解和应对方法。同时,也会有听众的来信分享,让你知道自己不是孤单的,许多人都在经历着类似的情感困境。这里充满了理解、安慰和鼓励,能帮助你舒缓情绪,治愈内心的伤痛,重新找回面对生活的勇气。'}if (title == "网易云音乐电台:小众音乐分享站") {return '介绍:对于那些不满足于主流音乐,热衷于探索小众音乐宝藏的人来说,这个电台是绝佳的选择。它专注于挖掘各种风格的小众音乐,包括独立摇滚、民谣、电子实验音乐、世界音乐等。每一首推荐的歌曲都像是一颗未经雕琢的宝石,等待着听众去发现它的独特魅力。在这里,你可以拓宽自己的音乐视野,邂逅那些被遗忘在角落却极具个性的好音乐,感受小众音乐所带来的新鲜感和艺术氛围。'}if (title == "懒人听书:国学经典诵读电台") {return '介绍:这是一个弘扬中华传统文化的电台,主要内容是国学经典著作的诵读。从《论语》《孟子》等儒家经典,到《道德经》《庄子》等道家智慧,再到唐诗宋词的优美韵律,都能在这里听到。主播们用标准的普通话和恰当的节奏,将这些古老的经典娓娓道来,让你在聆听中感受国学的博大精深。对于想要学习国学知识、提升文化素养或者寻找内心宁静的人来说,这个电台是很好的选择。'}return ''}
}function generateRandomDate(): string {const minYear = 2023; // 最小年份const maxYear = 2024; // 最大年份const minMonth = 1; // 最小月份const maxMonth = 12; // 最大月份const minDay = 1; // 最小日期const maxDay = 31; // 最大日期// 生成随机年份const year = Math.floor(Math.random() * (maxYear - minYear + 1)) + minYear;// 生成随机月份const month = Math.floor(Math.random() * (maxMonth - minMonth + 1)) + minMonth;// 根据月份生成合理的日期let day = 0;if ([1, 3, 5, 7, 8, 10, 12].includes(month)) {day = Math.floor(Math.random() * (31 - minDay + 1)) + minDay;} else if ([4, 6, 9, 11].includes(month)) {day = Math.floor(Math.random() * (30 - minDay + 1)) + minDay;} else if (month === 2) {// 处理闰年if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {day = Math.floor(Math.random() * (29 - minDay + 1)) + minDay;} else {day = Math.floor(Math.random() * (28 - minDay + 1)) + minDay;}}// 返回格式化的日期字符串return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
}
function generateFiveCharacterRandomString(): string {const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';let result = '';for (let i = 0; i < 5; i++) {result += characters.charAt(Math.floor(Math.random() * characters.length));}return result;
}
最近文章>>>>>>>>>>>
HarmonyOS NEXT实战:元服务与应用 APP 发布应用市场的详细步骤与流程
若本文对您稍有帮助,诚望您不吝点赞,多谢。
有兴趣的同学可以点击查看源码
- gitee:https://gitee.com/jiaojiaoone/explore-harmony-next/tree/case%2Fwanandroid/
- github:https://github.com/JasonYinH/ExploreHarmonyNext.git
相关文章:
HarmonyOS NEXT 实战之元服务:静态案例效果---电台推荐
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index import { authentica…...
微信小程序 不同角色进入不同页面、呈现不同底部导航栏
遇到这个需求之前一直使用的小程序默认底部导航栏,且小程序默认入口页面为pages/index/index,要使不同角色呈现不同底部导航栏,必须要在不同页面引用不同的自定义导航栏。本篇将结合分包(subPackages)展开以下三步叙述…...
MATLAB符号计算-符号表达式基础运算操作
1.1.2符号变量取值域的限定 默认复数域 【例1-1-2】解不等式 1.1.3创建符号表达式 对符号对象进行各种运算(算术运算、关系运算、逻辑运算),即可创建符号表达式。 1.算术运算与转置 【例1-1-3】 f5是f4的共轭转置 f6是f4的转置 2.关系…...
服务器被攻击怎么办
当服务器遭受恶意流量攻击,如DDoS(分布式拒绝服务)或CC(Challenge Collapsar)攻击时,传统的防护措施可能不足以应对。此时,采用高防IP服务可以有效缓解攻击压力,确保业务连续性和数据…...
精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目
精准检测花生豆:基于EfficientNet的深度学习分类项目 在现代农业生产中,作物的质量检测和分类是确保产品质量的重要环节。针对花生豆的检测与分类需求,我们开发了一套基于深度学习的解决方案,利用EfficientNetB0模型实现高效、准…...
【UE5 C++课程系列笔记】13——GameInstanceSubsystem的简单使用
目录 概念 基本使用案例 效果 步骤 概念 UGameInstanceSubsystem 类继承自 USubsystem,它与 GameInstance 紧密关联,旨在为游戏提供一种模块化、可方便扩展和管理的功能单元机制。在整个游戏运行期间,一个 GameInstance 可以包含多个 UGa…...
实用工具推荐----Doxygen使用方法
目录 目录 1 软件介绍 2 Doxygen软件下载方法 3 Doxygen软件配置方法 4 标准注释描述 4.1 块注释 和 特殊描述字符 4.1.1 函数描述示例 4.1.2结构体数组变量示例 特别注意: 4.2单行注释 4.2.1 单个变量注释示例 特别注意: 4.2.2对于枚举变量…...
js垃圾回收机制详细讲解
JavaScript 垃圾回收机制(Garbage Collection, GC)负责自动管理内存的分配和释放,确保程序在运行时不会因为内存泄漏而崩溃。它的主要任务是回收不再使用的内存空间,防止内存泄漏。JavaScript 的垃圾回收通常由引擎自动完成&#…...
【Linux/踩坑】Linux中启动eclipse或HDFS因JAVA_HOME设置报错
Linux中启动eclipse或hadoop因JAVA_HOME设置报错 eclipseHadoop eclipse 错误提示: A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the follo…...
百度千帆平台构建AI APP的基础概念梳理
百度千帆平台构建AI APP的基础概念梳理 如果想制作大语言模型(LLM)相关的APP, 将利用百度的千帆平台在国内可能是最便捷的途径,因为百度开发了成熟的工作流,前些年还有些不稳定,现在固定下来了,…...
Unity3D Huatuo技术原理剖析详解
前言 在游戏开发领域,Unity3D凭借其强大的跨平台能力和丰富的功能,成为了众多开发者的首选工具。而在Unity3D的生态系统中,Huatuo作为一款重要的插件,为游戏开发带来了极大的便利。本文将深入剖析Huatuo的技术原理,并…...
记Fastjson2的一个报ConcurrentModificationException的bug
错误背景:fastjson2的parseObject方法,在spring webflux项目中被调用,有时会报java.util.ConcurrentModificationException错误。报错处的代码如下图: 改了半天与并发安全相关的代码,还是会报此错误。后来改变思路搜…...
使用TimesFM 对车辆销售进行预测
代码功能概述 导入相关包与设置环境变量: 首先导入了如 os、numpy、pandas 等常用的 Python 库,同时设置了一些与特定库(如 XLA_PYTHON_CLIENT_PREALLOCATE 和 JAX_PM AP_USE_TENSORSTORE)相关的环境变量,用于优化计算…...
OpenEuler 22.03 不依赖zookeeper安装 kafka 3.3.2集群
零:规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器,用于搭建 kafka和flink 集群。因为从kafka 2.8 版本以后开始不依赖 zookeeper ,同时考虑到需要找一个发布时间早于 flink 1.17 的kafka 版本且应尽量稳定,综合考虑…...
ubuntu 将python3.8 升级为python3.10并进行版本切换
ubuntu 将python3.8 升级为python3.10并进行版本切换 前言将python3.8 升级为3.10安装pippython版本切换 前言 有一个功能包编译环境需要为python3.10 ,但是当前环境为python3.8 ,所以需要进行版本升级,编译完还需要把环境切换回来。 将pyt…...
3. Kafka入门—安装与基本命令
Kafka基础操作 一. 章节简介二. kafka简介三. Kafka安装1. 准备工作2. Zookeeper安装2.1 配置文件2.2 启动相关命令3. Kafka安装3.1 配置文件3.2 启动相关命令-------------------------------------------------------------------------------------------------------------…...
如何使用 python创建图片格式转换器
在本篇博客中,我们将通过一个简单的实例来展示如何使用 wxPython 创建一个图形用户界面(GUI)应用程序,用于将图片从一种格式转换为另一种格式。我们将通过以下几个步骤实现这一目标: C:\pythoncode\new\imageconvertty…...
命令行之巅:Linux Shell编程的至高艺术(上)
文章一览 前言一、shell概述1.1 shell的特点和类型1.1.1 **shell的特点:**1.1.2 常用shell类型 1.2 shell脚本的建立和执行1.2.1 建立shell脚本1.2.2 执行shell脚本的方式1.2.3 shell程序实例 二、shell变量与算数运算2.1 简单shell变量2.1.1 简单变量定义和赋值2.1…...
【gulp】gulp 的基本使用
gulp 是一个基于node的自动化打包构建工具,前端开发者可以使用它来处理常见任务: 创建项目 进入项目 npm init -ynpm i gulp -g (使用命令 gulp)npm i gulp -D # 开发依赖(前端工具都是开发依赖 本地安装 代…...
Linux 下处理 ^M 字符的最佳实践
Linux 下处理 ^M 字符的最佳实践 一、快速解决方案 按照优先级排序的三种解决方案: 1. 使用 dos2unix(推荐) # 安装 sudo apt-get install dos2unix # Ubuntu/Debian sudo yum install dos2unix # CentOS# 使用 dos2unix 文件名2. 使用 sed sed...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
