HarmonyOS NEXT 实战之元服务:静态案例效果--- 日出日落

背景:

前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考

先上本期效果图 ,里面图片自行替换

在这里插入图片描述

效果图1完整代码案例如下:

import { authentication } from '@kit.AccountKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

@Extend(Text)
function text1() {
  .fontColor('#7F7F7F').fontSize(12)
}

@Extend(Text)
function text2() {
  .fontColor('#181818').fontSize(20).margin({ top: 5 })
}

@Entry
@Component
struct Index {
  @State message: string = '';

  build() {
    Column() {
      Text($r('app.string.EntryAbility_label')).fontSize(38).fontWeight(FontWeight.Bold).margin({ top: 60 })
      Text('距离日出还剩').fontSize(18).fontWeight(FontWeight.Bold).margin({ top: 10 })
      Text(this.message).fontSize(22).fontWeight(FontWeight.Bold).margin({ top: 10 })
      Text('更新于' + this.getHour()).fontSize(15).margin({ top: 8 }).fontColor('#222222')


      Stack() {
        Column() {
          Column() {
          }
          .width('60%')
          .height(250)
          .borderRadius(300)
          .borderWidth(3)
          .margin({ top: 80 })
          .borderColor('#5891E6')
          .backgroundColor('#DFE7F2')
        }
        .width('90%')
        .height(400)
        .borderRadius(500)
        .borderWidth(3)
        .borderColor('#F0A12D')
        .backgroundColor('#FDEDD4')

        Row() {
          Row() {
            Text() {
              ImageSpan($r('app.media.richu')).width(20).height(20)
              Span('07:16')
            }

            Text() {
              ImageSpan($r('app.media.yuechu')).width(20).height(20)
              Span('05:13')
            }
          }


          Row() {
            Text() {
              Span('15:16')
              ImageSpan($r('app.media.yueluo')).width(20).height(20)
            }

            Text() {
              Span('16:51')
              ImageSpan($r('app.media.riluo')).width(20).height(20)
            }
          }

        }
        .width('96%')
        .justifyContent(FlexAlign.SpaceBetween)
        .height(250)
        .backgroundColor(Color.White)
        .margin({ top: 150 })
        .alignItems(VerticalAlign.Top)


        // 金色时刻(傍晚 )盏ばⓁ餐天时刻
        // 蓝色时刻(傍晚)
        // 17:09-17:20
        Row() {
          Column() {
            Text('金色时刻(清晨)').text1()
            Text('06:56-07:57').text2()
          }

          Column() {
            Text('日照时长').text1()
            Text('9.6h').text2()
          }

          Column() {
            Text('蓝色时刻(清晨)').text1()
            Text('06:45-06:56').text2()
          }

        }.width('100%').justifyContent(FlexAlign.SpaceAround).margin({ top: 30 })


        Row() {
          Column() {
            Text('金色时刻(傍晚)').text1()
            Text('16:09-17:09').text2()
          }

          Column() {
            Text('中天时刻').text1()
            Text('12:03').text2()
          }

          Column() {
            Text('蓝色时刻(傍晚)').text1()
            Text('17:09-17:20').text2()
          }

        }.width('100%').justifyContent(FlexAlign.SpaceAround).margin({ top: 140 })

      }.margin({ top: 30 }).width('100%')

    }
    .height('100%')
    .width('100%')
  }

  aboutToAppear() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    this.loginWithHuaweiID();
    this.getDate();
  }

  /**
   * 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 parameters
    let loginRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();
    // Whether to forcibly launch the HUAWEI ID login page when the user is not logged in with the HUAWEI ID
    loginRequest.forceLogin = false;
    // Execute login request
    let 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

      }
    });
  }

  private getDate() {
    // 获取当前时间的时间戳(以毫秒为单位)
    const currentTime = Date.now();

    // 计算10个小时后的时间戳(1小时 = 3600000毫秒)
    let tenHoursLater = currentTime + 7 * 3600000;

    let interval: number;

    const updateCountdown = () => {
      // 获取当前时间的时间戳
      const now = Date.now();

      // 计算剩余时间(以毫秒为单位)
      const remainingTime = tenHoursLater - now;

      // 如果剩余时间小于等于0,说明倒计时结束,清除定时器并重新开始倒计时
      if (remainingTime <= 0) {
        clearInterval(interval);
        // 重新计算10个小时后的时间戳
        tenHoursLater = Date.now() + 7 * 3600000;
        // 重新开始倒计时
        interval = setInterval(updateCountdown, 1000);
        return;
      }

      // 将剩余时间转换为小时、分钟、秒的格式
      const hours = Math.floor(remainingTime / 3600000);
      const minutes = Math.floor((remainingTime % 3600000) / 60000);
      const seconds = Math.floor((remainingTime % 60000) / 1000);

      // 在控制台输出当前剩余时间
      // console.log(`${hours}小时 ${minutes}分钟 ${seconds}秒`);
      this.message = `0${hours}小时 ${minutes}分钟 ${seconds}秒`;
    };

    // 开始倒计时
    interval = setInterval(updateCountdown, 1000);


  }

  private getHour() {
    // 获取当前时间的时间戳(以毫秒为单位)
    const timestamp = Date.now();

    // 根据时间戳创建一个Date对象
    const currentDate = new Date(timestamp);


    // 获取年份(例如:2024)
    const year = currentDate.getFullYear();

    // 获取月份(取值范围是0 - 11,0代表一月,11代表十二月)
    const month = currentDate.getMonth() + 1; // 需加1以得到实际的月份值

    // 获取日期(取值范围是1 - 31)
    const day = currentDate.getDate();

    // 获取小时(24小时制,取值范围是0 - 23)
    const hours = currentDate.getHours();

    // 获取分钟(取值范围是0 - 59)
    const minutes = currentDate.getMinutes();

    return `${year} 年 ${month} 月 ${day} 日 ${hours} : ${minutes}`;
  }
}



最近文章>>>>>>>>>>>

HarmonyOS NEXT实战:元服务与应用 APP 发布应用市场的详细步骤与流程

若本文对您稍有帮助,诚望您不吝点赞,多谢。

有兴趣的同学可以点击查看源码

  • gitee:https://gitee.com/jiaojiaoone/explore-harmony-next/tree/case%2Fwanandroid/
  • github:https://github.com/JasonYinH/ExploreHarmonyNext.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942913.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一起学Git【番外篇:如何在Git中新建文件】

在介绍Git之前&#xff0c;我们需要了解一下如何在Git里添加、编辑和删除文件。 首先&#xff0c;需要使用文件编辑器进行文件的创建&#xff0c;常见的文件编辑器有以下几种&#xff1a; Vim&#xff1a;一种基于命令行的编辑器&#xff0c;功能强大&#xff0c;适合开发者和…

叉车作业如何确认安全距离——UWB测距防撞系统的应用

叉车在工业环境中运行&#xff0c;常常需要在狭窄的空间内完成货物的搬运和堆垛&#xff0c;这对操作员的技术水平和安全意识提出了极高的要求。传统的叉车作业依赖操作员的经验和视觉判断来确认安全距离&#xff0c;然而这种方式往往存在误差&#xff0c;特别是在视线受阻或光…

hi168大数据离线项目环境搭建

hi168大数据离线项目环境搭建 ## **1. 服务器准备**##### 1.1 创建集群应用节点 集群服务器使用“我的应用“中的Ubuntu22.04集群模版创建三个节点应用&#xff0c;并且进入“我的应用”中去修改一下节点名称&#xff08;node1对应master&#xff0c;node2对应hadoop1&#xf…

分布式专题(10)之ShardingSphere分库分表实战指南

一、ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。Apache ShardingSphere 设计哲学为 Database Plus&#xff0c;旨在…

大模型-Ollama使用相关的笔记

大模型-Ollama使用相关的笔记 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09;Postman请求样例 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09; 安装Ollama完毕后&#xff0c; /etc/systemd/system/ollama.service进行如下修改&#…

Python:模拟(包含例题:饮料换购 图像模糊 螺旋矩阵)

模拟题&#xff1a;直接按照题目含义模拟即可&#xff0c;一般不涉及算法 注意&#xff1a; 1.读懂题&#xff1a;理清楚题目流程 2.代码和步骤一一对应&#xff1a;变量名&#xff0c;函数名&#xff0c;函数功能 3.提取重复的部分&#xff0c;写成对应的函数&#xff08;…

【数据库初阶】数据库基础知识

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 数据库…

汽车IVI中控开发入门及进阶(四十):FDK AAC音频编解码软件库

概述: FDK AAC是一个用于编码和解码高级音频编码格式音频的开源软件库,由Fraunhofer IIS开发,并作为Android的一部分包含在内。它支持多种音频对象类型,包括MPEG-2和MPEG-4 AAC LC、HE-AAC、HE-AACv2以及AAC-LD和AAC-ELD,用于实时通信。编码库支持高达96 kHz的采样率和多…

Python爬虫:速卖通aliexpress商品详情获取指南

在数字化时代&#xff0c;数据已成为企业竞争的关键资源。对于电商行业而言&#xff0c;获取竞争对手的商品信息是洞察市场动态、优化自身产品策略的重要手段。速卖通&#xff08;AliExpress&#xff09;作为全球知名的跨境电商平台&#xff0c;其商品信息的获取自然成为了许多…

要查询 `user` 表中 `we_chat_open_id` 列不为空的用户数量

要查询 user 表中 we_chat_open_id 列不为空的用户数量&#xff0c;你可以使用以下 SQL 查询语句&#xff1a; SELECT COUNT(*) FROM user WHERE we_chat_open_id IS NOT NULL AND we_chat_open_id ! ;解释&#xff1a; SELECT COUNT(*): 表示要计算符合条件的行数。FROM us…

学习思考:一日三问(学习篇)之匹配VLAN

学习思考&#xff1a;一日三问&#xff08;学习篇&#xff09;之匹配VLAN 一、学了什么&#xff08;是什么&#xff09;1.1 理解LAN与"V"的LAN1.2 理解"V"的LAN怎么还原成LAN1.3 理解二层交换机眼中的"V"的LAN 二、为何会产生需求&#xff08;为…

mac中idea菜单工具栏没有git图标了

1.右击菜单工具栏 2.选中VCS&#xff0c;点击添加 3.搜索你要的工具&#xff0c;选中点击确定就添加了 4.回到上面一个界面&#xff0c;选中你要放到工具栏的工具&#xff0c;点击应用就好了 5.修改图标&#xff0c;快捷键或者右击选中编辑图标 6.选择你要的图标就好了

深度学习中batch_size

Batch size调整和epoch/iteration的关系 训练数据集总共有1000个样本。若batch_size10&#xff0c;那么训练完全体样本集需要100次迭代&#xff0c;1次epoch。 训练样本10000条&#xff0c;batchsize设置为20&#xff0c;将所有的训练样本在同一个模型中训练5遍&#xff0c;则…

Vue使用Tinymce 编辑器

目录 一、下载并重新组织tinymce结构二、使用三、遇到的坑 一、下载并重新组织tinymce结构 下载 npm install tinymce^7 or yarn add tinymce^7重构目录 在node_moudles里找到tinymce文件夹&#xff0c;把里面文件拷贝一份放到public下&#xff0c;如下&#xff1a; -- pub…

【每日学点鸿蒙知识】蓝牙Key、页面元素层级工具、私仓搭建、锁屏显示横幅、app安装到真机

1、HarmonyOS 蓝牙key模块&#xff1f; 蓝牙key模块setCharacteristicChangeNotification后无法在BLECharacteristicChange订阅事件中监听到特征值变化 步骤&#xff1a; 调用setCharacteristicChangeNotification接口&#xff0c;使characteristic的notify属性为true调用wri…

如何记录日常笔记

如何使用Obsidian来记录日常的笔记吗&#xff1f;比如会议记录、读书笔记。 我认为&#xff0c;首先需要做好的就是建立一个单独的分类&#xff0c;比如设置会议记录的文件夹、读书笔记的文件夹&#xff0c;这样各个笔记相互不干扰。 而做日常记录&#xff0c;和我们进行卡片…

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录 1、什么是空字符串&#xff1f;2、两个引号之间加上空格 好的&#xff0c;我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别&#xff0c;以及它们在 SQL 查询中的作用&#xff1a; 1. we_chat_union_id IS NOT NULL 含…

NS3学习——tcpVegas算法代码详解(2)

NS3学习——tcpVegas算法代码详解&#xff08;1&#xff09;-CSDN博客 目录 4.TcpVegas类中成员函数 (5) CongestionStateSet函数 (6) IncreaseWindow函数 1.检查是否启用 Vgas 2.判断是否完成了一个“Vegas 周期” 2.1--if&#xff1a;判断RTT样本数量是否足够 2.2--e…

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

目录 一、温度传感器模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 &#x1f505;STS30-DIS-B &#x1f319;引脚分配 &#x1f319;通信 &#x1f319;时钟拉伸&#xff08;Clock Stretching&#xff09; &#x1f319;单次触发模式 &#x1f319;温度数据转…

项目2路由交换

背景 某学校为满足日常教学生活需求&#xff0c;推动数字校园的建设&#xff0c;学校有办公楼和学生宿舍楼和服务器集群三块区域&#xff0c;请合理规划IP地址和VLAN&#xff0c;实现企业内部能够互联互通现要求外网能通过公网地址访问服务器集群&#xff0c;学生和老师能正常…