鸿蒙实战开发-如何实现时钟、闹钟、倒计时、设置屏幕亮度相功能

567 篇文章 2 订阅
555 篇文章 0 订阅

介绍

本示例集中展示了时钟、闹钟、倒计时、设置屏幕亮度相关的场景,
1、使用@ohos.reminderAgentManager完成闹钟的相关功能,
2、使用animateTo完成翻页时钟动画,使用@ohos.runningLock完成屏幕常亮功能,
3、设置屏幕亮度,使用@ohos.brightness系统能力调节屏幕亮度,
4、后台消息提醒,使用@ohos.notificationManager系统能力做后台代理提醒。
5、需要系统存储信息,使用用户首选项接口@ohos.data.preferences。

效果预览

使用说明

1.主页面有四个底部标签栏,时钟页面展示了数字翻页时钟功能。

2.闹钟功能点击**+**号可以创建一个闹钟,等闹钟时间到了会进行提醒。

3.倒计时功能。

4.设置里边实现的功能有全屏、调节屏幕亮度和不熄屏。

工程目录

entry/src/main/ets/
|---common
|   |---AlarmClock.ets                  // 闹钟组件
|   |---CountDown.ets                   // 倒计时组件
|   |---CustomDataPicker.ets            // 点击添加闹钟弹出来的时间选择器组件
|   |---DataSource.ets                  // 闹钟组件
|   |---FlipClock.ets                   // 翻转时钟组件
|   |---LockSwitch.ets                  // 屏幕常亮组件
|   |---Setting.ets                     // 设置组件
|---mock
|   |---TabData.ets                     // 放TabContent()资源:tabs()组件切换时,每个子tab用到的资源
|---model
|   |---StorageModel.ets                // 存储组件
|---pages
|   |---Index.ets                       // 首页

相关概念

后台代理提醒:后台代理提醒主要提供后台提醒发布接口,开发者在应用开发时,可以调用这些接口去创建定时提醒,包括倒计时、日历、闹钟三种提醒类型。使用后台代理提醒能力后,应用可以被冻结或退出,计时和弹出提醒的功能将被后台系统服务代理。

具体实现

  • 在entry/pages/index.ets中通过tabArray.TabType.num的值来加载每个TabContent()的资源,num:[0,1,2,3]分别加载翻页时钟,闹钟,倒计时,设置组件。源码参考 。
  • 页面编写步骤:
    1、定义以下四个页面组件 FlipClock()//翻转时钟 AlarmClock()// 闹钟CountDown()// 倒计时Setting()//设置
    2、使用tabs()标签,将四个组件封装。
  • 组件逻辑实现
    1、时钟: 通过aboutToAppear()中new date()获取当前时间,通过获取date的时、分、秒,10位数通过math.floor()取整,个位数通过对10取余,从而实现对时间格式化,使用box标签,对获取到的数据进行渲染。
    2、闹钟:
  • a) 使用自定义对话控制器CustomDialogController,定义时间选择器,使用data.preferences存储设置的闹钟,并使用reminderAgentManager将其添加到系统中。 import data_preferences from '@ohos.data.preferences' import reminderAgentManager from '@ohos.reminderAgentManager'
  • b) 页面从data.preferences获取添加的闹钟数据,通过Scroll()标签渲染,在标签row内,设置delete按钮,如果删除就调用以下函数取消系统时钟 import reminderAgentManager from '@ohos.reminderAgentManager' reminderAgentManager.cancelReminder
  • a) 使用aboutToAppear()初始化界面布局,通过this.listener.on('change', portraitFunc)添加监听,
  • b) 点击开始按钮触发以下函数开始计时,并修改按钮的样式为暂停,并将running=true,触发canvas样式 countInSec = pickerH * 3600 + pickerM * 60 + pickerS //总计时计算 this.timer = setInterval(this.timerCountDown.bind(this), 1000) //时间计算
  • c) 点击暂停按钮,时间暂停,并将按钮样式修改为开始
    clearInterval(this.timer) this.isRunning = true this.isPausing = true this.startImg = $r('app.media.start
  • d) 点击reset计时重置,将所有数据初始化
    clearInterval(this.timer) this.isRunning = false this.isPausing = false this.progressVal = 0 this.rotates = 0 passSec = 0 this.hoursTime = 0 this.minuteTime = 0 this.secondTime = 0 pickerH = 0 pickerM = 0 pickerS = 0 this.startImg = r(′app.media.start′)this.resetImg=�(′���.�����.�����′)�ℎ��.��������=r('app.media.resetccc')

依赖

不涉及。

约束与限制

1.本示例仅支持在标准系统上运行。

2.本示例需要使用DevEco Studio 3.1 Beta2 (Build Version: 3.1.0.400 , built on April 7, 2023)及以上版本才可编译运行。

3.本示例已适配API version 9版本SDK,版本号:3.2.11.9;

4.本示例需要使用@ohos.brightness和@ohos.notificationManager系统权限的系统接口。使用Full SDK时需要手动从镜像站点获取,并在DevEco Studio中替换。

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/Solutions/Tools/FlipClock/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《https.docs.qq.com

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书方式请点击→《https.docs.qq.com

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. .……

在这里插入图片描述


二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

在这里插入图片描述

三、如何快速入门?https.docs.qq.com

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. .……

在这里插入图片描述


四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. .……

在这里插入图片描述


五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 7.网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. .……

在这里插入图片描述


更多了解更多鸿蒙开发的相关知识可以参考:《https.docs.qq.com

  • 25
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用 C 语言和 FLTK 库实现数字时钟倒计时功能的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Button.H> #include <FL/Fl_Output.H> // 定义时钟倒计时的窗口大小 #define WINDOW_WIDTH 350 #define WINDOW_HEIGHT 150 // 定义时钟倒计时的文本显示区域 #define CLOCK_X 50 #define CLOCK_Y 30 #define CLOCK_WIDTH 100 #define CLOCK_HEIGHT 30 #define COUNTDOWN_X 220 #define COUNTDOWN_Y 30 #define COUNTDOWN_WIDTH 100 #define COUNTDOWN_HEIGHT 30 // 定义倒计时的按钮 #define START_BUTTON_X 140 #define START_BUTTON_Y 80 #define START_BUTTON_WIDTH 70 #define START_BUTTON_HEIGHT 30 // 定义倒计时的秒数 #define COUNTDOWN_SECONDS 60 // 时钟倒计时的回调函数 void clock_callback(void* data); void countdown_callback(void* data); // 时钟倒计时的计时器 Fl_Timeout* clock_timer; Fl_Timeout* countdown_timer; // 时钟倒计时的文本显示 Fl_Output* clock_output; Fl_Output* countdown_output; // 倒计时的按钮 Fl_Button* start_button; // 时钟倒计时的时间结构体 struct tm clock_time; struct tm countdown_time; int main(int argc, char** argv) { // 初始化 FLTK 库 Fl::scheme("gtk+"); Fl::set_font(FL_HELVETICA_BOLD, "Arial"); // 创建窗口 Fl_Window* window = new Fl_Window(WINDOW_WIDTH, WINDOW_HEIGHT, "数字时钟"); // 创建时钟的文本显示 clock_output = new Fl_Output(CLOCK_X, CLOCK_Y, CLOCK_WIDTH, CLOCK_HEIGHT, ""); clock_output->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); clock_output->textsize(20); // 创建倒计时的文本显示 countdown_output = new Fl_Output(COUNTDOWN_X, COUNTDOWN_Y, COUNTDOWN_WIDTH, COUNTDOWN_HEIGHT, ""); countdown_output->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); countdown_output->textsize(20); // 创建开始倒计时的按钮 start_button = new Fl_Button(START_BUTTON_X, START_BUTTON_Y, START_BUTTON_WIDTH, START_BUTTON_HEIGHT, "开始"); start_button->callback(countdown_callback); // 显示窗口 window->end(); window->show(argc, argv); // 开始时钟的计时器 clock_timer = Fl::add_timeout(0.0, clock_callback, NULL); // 进入 FLTK 主循环 return Fl::run(); } void clock_callback(void* data) { // 获取当前时间 time_t current_time = time(NULL); localtime_r(&current_time, &clock_time); // 更新时钟的文本显示 char clock_text[9]; snprintf(clock_text, 9, "%02d:%02d:%02d", clock_time.tm_hour, clock_time.tm_min, clock_time.tm_sec); clock_output->value(clock_text); // 继续时钟的计时器 clock_timer = Fl::add_timeout(1.0, clock_callback, NULL); } void countdown_callback(void* data) { // 禁用倒计时的按钮 start_button->deactivate(); // 设置倒计时的时间 time_t current_time = time(NULL) + COUNTDOWN_SECONDS; localtime_r(&current_time, &countdown_time); // 更新倒计时的文本显示 char countdown_text[9]; snprintf(countdown_text, 9, "%02d:%02d:%02d", countdown_time.tm_hour, countdown_time.tm_min, countdown_time.tm_sec); countdown_output->value(countdown_text); // 开始倒计时的计时器 countdown_timer = Fl::add_timeout(1.0, [](void* data){ // 获取当前时间 time_t current_time = time(NULL); localtime_r(&current_time, &countdown_time); // 更新倒计时的文本显示 char countdown_text[9]; snprintf(countdown_text, 9, "%02d:%02d:%02d", countdown_time.tm_hour, countdown_time.tm_min, countdown_time.tm_sec); countdown_output->value(countdown_text); // 判断是否倒计时结束 if (current_time >= (time_t)(countdown_time.tm_year + 1900) * 31536000 + countdown_time.tm_yday * 86400 + countdown_time.tm_hour * 3600 + countdown_time.tm_min * 60 + countdown_time.tm_sec) { // 停止倒计时的计时器 countdown_timer->stop(); // 更新倒计时的文本显示 countdown_output->value("00:00:00"); // 启用倒计时的按钮 start_button->activate(); } }, NULL); } ``` 在这个示例代码中,我们首先使用 FLTK 库创建了一个窗口,并在窗口中创建了时钟倒计时的文本显示以及倒计时的按钮。然后,我们使用 FLTK 库的计时器功能,分别实现时钟倒计时的计时器,并在时钟倒计时的计时器回调函数中更新了时钟倒计时的文本显示。最后,我们在倒计时的按钮回调函数中实现倒计时功能,并在倒计时的计时器回调函数中更新了倒计时的文本显示,并在倒计时结束后重新启用了倒计时的按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值