偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

HarmonyOS - 實(shí)現(xiàn)消息定時(shí)提醒

系統(tǒng) OpenHarmony
對(duì)于提醒類(lèi)ReminderRequest的3個(gè)子類(lèi)來(lái)說(shuō),ReminderRequestTimer用于倒計(jì)時(shí)提醒,ReminderRequestAlarm用于鬧鐘類(lèi)提醒,ReminderRequestCalendar類(lèi)用于日歷類(lèi)提醒。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

前言

在一些應(yīng)用中,需要通過(guò)時(shí)間設(shè)置提醒用戶操作,如鬧鐘,象棋步數(shù)倒計(jì)時(shí)等。

設(shè)計(jì)思路:將對(duì)時(shí)間的獲取與響應(yīng)的結(jié)果拆分開(kāi),時(shí)間的獲取可以有倒計(jì)時(shí)與直接設(shè)計(jì)時(shí)間。響應(yīng)結(jié)果可以是:震動(dòng),閃爍,通知欄,鈴聲。

項(xiàng)目涵蓋了IntetAgent,通知,以及JS FA調(diào)用PA等知識(shí)點(diǎn),項(xiàng)目應(yīng)用到了前面同事編寫(xiě)的計(jì)時(shí)器組件??#夏日挑戰(zhàn)賽# HarmonyOS - 自定義組件之計(jì)時(shí)器??。

效果展示

如果需要展示震動(dòng)和彈出效果,需要通過(guò)物理機(jī)進(jìn)入通知管理,勾選橫幅通知和鎖屏通知并且修改震動(dòng)為其他震動(dòng)方式。

倒計(jì)時(shí)提醒如下圖:

#夏日挑戰(zhàn)賽# HarmonyOS - 實(shí)現(xiàn)消息定時(shí)提醒-開(kāi)源基礎(chǔ)軟件社區(qū)


鬧鐘類(lèi)提醒如下圖:

#夏日挑戰(zhàn)賽# HarmonyOS - 實(shí)現(xiàn)消息定時(shí)提醒-開(kāi)源基礎(chǔ)軟件社區(qū)


實(shí)現(xiàn)步驟

1、聲明權(quán)限

"reqPermissions": [  {"name": "ohos.permission.PUBLISH_AGENT_REMINDER"  }]

2、構(gòu)建前端頁(yè)面

前端頁(yè)面主要是獲取設(shè)置的倒計(jì)時(shí)以及設(shè)置的鬧鐘類(lèi)的時(shí)間,封裝進(jìn)一個(gè)對(duì)象ActionData通過(guò)調(diào)用接口傳遞給PA處理。

主要分為兩部分:一部分是倒計(jì)時(shí)提醒界面,一部分是鬧鐘類(lèi)提醒界面。

在編寫(xiě)頁(yè)面的時(shí)候遇到了一個(gè)問(wèn)題:由于初步編寫(xiě)hml頁(yè)面,不知道如何實(shí)現(xiàn)input輸入框的雙向綁定,后面請(qǐng)教后解決:通過(guò)change事件來(lái)觸發(fā)。

hml代碼如下:

<element name="countDown" src="../countDown/countDown.hml">
</element>
<div class="container">
<!--倒計(jì)時(shí)功能區(qū)域-->
<div class="box">
<text>倒計(jì)時(shí): {{ leftTime }} s</text>
<input type="text" id="countDown" onchange="changeCountDown"></input>
<countDown time="{{ leftTime }}">
</countDown>
<div>
<button class="button" value="設(shè)置" onclick="alarmCountdown"></button>
</div>
</div>
<!--定時(shí)功能區(qū)域-->
<div class="box">
<form>
<text>時(shí):</text>
<input type="text" id="hour" onchange="changeHour"></input>
<text>分:</text>
<input type="text" id="minute" onchange="changeMinute"></input>
<div>
<button class="button" value="設(shè)置" onclick="alarmClock"></button>
<button class="button" value="取消" onclick="cancel"></button>
</div>
</form>
</div>
</div>

主要js代碼如下:

通過(guò)不同的命令實(shí)現(xiàn)不同的調(diào)用。

//雙向綁定實(shí)現(xiàn)
changeHour(event){
this.hour=event.value;
},
changeMinute(event){
this.minute=event.value
},
changeCountDown(event){
this.countDown=event.value
},
//鬧鐘類(lèi)提醒
alarmClock:function(){
this.notification(0x1003);
},
//倒計(jì)時(shí)提醒
alarmCountdown:function(){
this.leftTime=0;//重置倒計(jì)時(shí)的讀秒
this.leftTime=this.countDown;//同步倒計(jì)時(shí)讀秒
this.notification(0x1002);
},
//取消提醒
cancel:function(){
this.notification(0x1001);
},
//初始化action數(shù)據(jù)
initAction: function (code) {
var actionData = {hour:this.hour,minute:this.minute,countDown:this.countDown};
actionData.notify = "this actionData form JS ";
var action = {};
action.bundleName = "com.chinasoft.reminder";
action.abilityName = "ReminderAbility";
action.messageCode = code;
action.data = actionData;
action.abilityType = 1;
action.syncOption = 0;
return action;
},
//調(diào)用PA接口
notification: async function(code) {
try {
var action = this.initAction(code);
var result = await FeatureAbility.callAbility(action);
this.showToast(result);
} catch (pluginError) {
console.error("startNotification : Plugin Error = " + pluginError);
}
},

3、設(shè)置ReminderRequest類(lèi)

(1)設(shè)置通知插槽NotificationSlot

這里有個(gè)坑,需要手動(dòng)設(shè)置手機(jī)的通知管理的通知鈴聲,打開(kāi)震動(dòng)才有震動(dòng)效果,打開(kāi)橫幅通知才有通知彈出效果。設(shè)置如下圖:

#夏日挑戰(zhàn)賽# HarmonyOS - 實(shí)現(xiàn)消息定時(shí)提醒-開(kāi)源基礎(chǔ)軟件社區(qū)


設(shè)置通知slot需要真實(shí)的手機(jī)才有震動(dòng)效果,設(shè)置呼吸燈需要手機(jī)支持呼吸燈才有效果。

/*
* 設(shè)置通知slot
* */
private NotificationSlot setSlot() {
// 1. 設(shè)置渠道信息
NotificationSlot slot = new NotificationSlot("slot_id", "slot_name", NotificationSlot.LEVEL_HIGH);
slot.setDescription("slot_description");//設(shè)置NotificationSlot的描述信息。
slot.enableBypassDnd(true);//設(shè)置是否繞過(guò)系統(tǒng)的免打擾模式
slot.setEnableLight(false);//設(shè)置收到通知時(shí)是否開(kāi)啟呼吸燈,前提是當(dāng)前硬件支持呼吸燈。
slot.setEnableVibration(true);//設(shè)置收到通知時(shí)是否使能振動(dòng)。
slot.setLedLightColor(123456);
return slot;
}
// 2. 向代理服務(wù)添加渠道對(duì)象
ReminderHelper.addNotificationSlot(setSlot());

(2)創(chuàng)建提醒類(lèi)對(duì)象

ReminderRequest分為3個(gè)子類(lèi):1.ReminderRequestTimer ,2.ReminderRequestCalendar ,3.ReminderRequestAlarm。

ReminderRequestTimer 對(duì)象創(chuàng)建。

用于倒計(jì)時(shí)提醒,需要傳遞進(jìn)一個(gè)倒計(jì)時(shí)的秒的參數(shù)。這個(gè)數(shù)據(jù)是從前端頁(yè)面?zhèn)鬟^(guò)來(lái)的。

ReminderRequest reminderRequestTimer = new ReminderRequestTimer(countDown);

ReminderRequestAlarm對(duì)象創(chuàng)建。

用于鬧鐘類(lèi)提醒,需要傳遞時(shí)間數(shù)據(jù)。需要三個(gè)參數(shù):int hour,int minute,int[] repeatDay。

ReminderRequest reminder = new ReminderRequestAlarm(hour, minute, repeatDay);

(3)設(shè)置提醒標(biāo)題和內(nèi)容

提醒是以通知形式來(lái)表現(xiàn)的。設(shè)置通知展示的標(biāo)題和內(nèi)容。

reminderRequestTimer.setTitle("倒計(jì)時(shí)").setContent("炸彈");      //設(shè)置標(biāo)題和內(nèi)容

(4)設(shè)置提醒時(shí)長(zhǎng)屬性

提醒默認(rèn)提醒一次,如果需要提醒能長(zhǎng)時(shí)間提醒,進(jìn)行如下設(shè)置:

reminder.setRingDuration(10);//設(shè)置提醒時(shí)長(zhǎng)

(5)設(shè)置IntentAgent

需要設(shè)置BundleName和AbilityName。且AbilityName需要全類(lèi)名(加上包名),才能實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。點(diǎn)擊提醒彈出的通知就會(huì)跳轉(zhuǎn)到對(duì)應(yīng)的頁(yè)面。

reminder.setIntentAgent(BUNDLE_NAME, ABILITY_NAME);

(6)設(shè)置延時(shí)提醒,功能按鈕

延時(shí)提醒和設(shè)置延時(shí)的時(shí)間,設(shè)置延時(shí)后提醒的次數(shù)。

當(dāng)提醒時(shí)會(huì)發(fā)出通知,設(shè)置延遲提醒和關(guān)閉按鈕。

reminder.setSnoozeTimes(2)     //設(shè)置延遲提醒次數(shù)
.setTimeInterval(1 * 60);//設(shè)置一分鐘,實(shí)際為5分鐘
reminder.setActionButton("延遲", ReminderRequest.ACTION_BUTTON_TYPE_SNOOZE)
.setActionButton("關(guān)閉", ReminderRequest.ACTION_BUTTON_TYPE_CLOSE);

在這里有一個(gè)坑:通過(guò)測(cè)試得,延遲提醒的最短時(shí)間為300s(5分鐘)如果設(shè)置時(shí)間小于300s則為默認(rèn)的。

注意:對(duì)于倒計(jì)時(shí)提醒設(shè)置延遲提醒不起作用,只有設(shè)置提醒時(shí)長(zhǎng)有效。

(7)發(fā)布和取消提醒

發(fā)布和取消提醒都是通過(guò)ReminderHelper這個(gè)類(lèi)來(lái)完成的,取消提醒需要獲取發(fā)布提醒后返回的一個(gè)整型id來(lái)識(shí)別需要取消哪一個(gè)提醒。

int reminderId = ReminderHelper.publishReminder(reminder);//發(fā)布提醒
ReminderHelper.cancelReminder(this.reminderId);//取消提醒

總結(jié)

對(duì)于提醒類(lèi)ReminderRequest的3個(gè)子類(lèi)來(lái)說(shuō),ReminderRequestTimer用于倒計(jì)時(shí)提醒,ReminderRequestAlarm用于鬧鐘類(lèi)提醒,ReminderRequestCalendar類(lèi)用于日歷類(lèi)提醒。本項(xiàng)目還有日歷類(lèi)提醒(ReminderRequestCalendar)的功能沒(méi)有實(shí)現(xiàn),通過(guò)API可以發(fā)現(xiàn)其與鬧鐘類(lèi)提醒的功能實(shí)現(xiàn)大致一樣。在運(yùn)用時(shí)需要注意其中的一些細(xì)節(jié),才能正確使用。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??。

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2013-03-11 10:11:21

Windows 8消息提醒

2009-12-14 13:42:13

Linux桌面Linux蘋(píng)果

2022-11-07 10:43:20

RocketMQConsumer場(chǎng)景

2019-02-25 15:44:16

開(kāi)源RabbitMQSpring Clou

2022-07-01 17:14:03

消息通知鴻蒙

2021-08-04 10:22:27

鴻蒙HarmonyOS應(yīng)用

2017-03-20 09:50:35

消息隊(duì)列架構(gòu)消息

2011-09-05 17:40:40

MTK定時(shí)器

2019-12-26 09:38:57

GitHub工具 wxpy

2010-06-09 15:15:34

MySQL定時(shí)執(zhí)行

2022-01-26 07:01:00

開(kāi)源社區(qū)項(xiàng)目

2011-09-16 11:08:10

IOS應(yīng)用易提醒

2009-10-12 14:32:40

VB.NET實(shí)現(xiàn)定時(shí)關(guān)

2024-11-04 16:01:01

2020-12-21 07:31:23

實(shí)現(xiàn)單機(jī)JDK

2024-12-27 08:24:55

2024-03-22 12:10:39

Redis消息隊(duì)列數(shù)據(jù)庫(kù)

2025-01-10 08:20:00

MQ消息架構(gòu)

2020-08-26 07:17:19

通信

2022-08-19 15:09:37

微信移動(dòng)應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)