Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
3c8b7696
D
Docs
项目概览
OpenHarmony
/
Docs
接近 2 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3c8b7696
编写于
12月 02, 2022
作者:
Z
zengyawen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update application-models
“ Signed-off-by:
N
zengyawen
<
zengyawen1@huawei.com
>
上级
857105d3
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
193 addition
and
205 deletion
+193
-205
zh-cn/application-dev/task-management/Readme-CN.md
zh-cn/application-dev/task-management/Readme-CN.md
+2
-2
zh-cn/application-dev/task-management/background-agent-scheduled-reminder-guide.md
...k-management/background-agent-scheduled-reminder-guide.md
+0
-191
zh-cn/application-dev/task-management/background-agent-scheduled-reminder-overview.md
...anagement/background-agent-scheduled-reminder-overview.md
+0
-12
zh-cn/application-dev/task-management/figures/zh-cn_image_0000001416585578.png
.../task-management/figures/zh-cn_image_0000001416585578.png
+0
-0
zh-cn/application-dev/task-management/reminder-agent-development.md
...ication-dev/task-management/reminder-agent-development.md
+177
-0
zh-cn/application-dev/task-management/reminder-agent-overview.md
...pplication-dev/task-management/reminder-agent-overview.md
+14
-0
未找到文件。
zh-cn/application-dev/task-management/Readme-CN.md
浏览文件 @
3c8b7696
...
@@ -8,5 +8,5 @@
...
@@ -8,5 +8,5 @@
-
[
申请能效资源开发指导
](
efficiency-resources-apply-dev-guide.md
)
-
[
申请能效资源开发指导
](
efficiency-resources-apply-dev-guide.md
)
-
后台代理提醒
-
后台代理提醒
-
[
后台代理提醒
开发概述
](
background-agent-scheduled-reminder
-overview.md
)
-
[
后台代理提醒
概述
](
reminder-agent
-overview.md
)
-
[
后台代理提醒开发指导
](
background-agent-scheduled-reminder-guide
.md
)
-
[
后台代理提醒开发指导
](
reminder-agent-development
.md
)
zh-cn/application-dev/task-management/background-agent-scheduled-reminder-guide.md
已删除
100644 → 0
浏览文件 @
857105d3
# 后台代理提醒开发指导
## 场景介绍
后台代理提醒主要提供后台提醒发布接口,开发者在应用开发时,可以调用这些接口去创建定时提醒,包括倒计时、日历、闹钟三种提醒类型。使用后台代理提醒能力后,应用可以被冻结或退出,计时和弹出提醒的功能将被后台系统服务代理。
## 接口说明
reminderAgentManager:封装了发布、取消提醒类通知的方法。
具体后台提醒相关功能接口请见
[
后台代理提醒
](
../reference/apis/js-apis-reminderAgentManager.md
)
。
**表1**
reminderAgentManager主要接口
| 接口名 | 描述 |
| -------- | -------- |
| publishReminder(reminderReq:
ReminderRequest,
callback:
AsyncCallback
<
number
>
):
void
<br/>
publishReminder(reminderReq:
ReminderRequest):
Promise
<
number
>
| 发布一个定时提醒类通知。
<br/>
单个应用有效的提醒个数最多支持30个(不包括已经超时,即后续不会再提醒的提醒实例)
<br/>
整个系统有效的提醒个数最多支持2000个(不包括已经超时,即后续不会再提醒的提醒实例) |
| cancelReminder(reminderId:
number,
callback:
AsyncCallback
<
void
>
):
void
<br/>
cancelReminder(reminderId:
number):
Promise
<
void
>
| 取消一个指定的提醒类通知。(reminderId从publishReminder的返回值获取) |
| getValidReminders(callback:
AsyncCallback
<
Array
<
ReminderRequest
>>
):
void
<br/>
getValidReminders():
Promise
<
Array
<
ReminderRequest
>>
| 获取当前应用设置的所有有效的提醒。 |
| cancelAllReminders(callback:
AsyncCallback
<
void
>
):
void
<br/>
cancelAllReminders():
Promise
<
void
>
| 取消当前应用设置的所有提醒 |
| addNotificationSlot(slot:
NotificationSlot,
callback:
AsyncCallback
<
void
>
):
void
<br/>
addNotificationSlot(slot:
NotificationSlot):
Promise
<
void
>
| 注册一个提醒类需要使用的NotificationSlot |
| removeNotificationSlot(slotType:
notification.SlotType,
callback:
AsyncCallback
<
void
>
):
void
<br/>
removeNotificationSlot(slotType:
notification.SlotType):
Promise
<
void
>
| 删除指定类型的NotificationSlot |
## 开发步骤
> **说明:**
>
> 1. 应用需要配置权限:ohos.permission.PUBLISH_AGENT_REMINDER。
>
> 2. 应用需要申请通知弹窗:[Notification.requestEnableNotification](../reference/apis/js-apis-notification.md#notificationrequestenablenotification8)。
> 只有用户授权后,提醒代理的功能才能使用。
1、定义目标提醒代理。
2、发布相应的提醒代理。
```
ts
import
reminderAgentManager
from
'
@ohos.reminderAgentManager
'
;
import
notification
from
'
@ohos.notification
'
;
// 倒计时实例定义:
let
timer
:
reminderAgentManager
.
ReminderRequestTimer
=
{
reminderType
:
reminderAgentManager
.
ReminderType
.
REMINDER_TYPE_TIMER
,
triggerTimeInSeconds
:
10
,
actionButton
:
[
{
title
:
"
close
"
,
type
:
reminderAgentManager
.
ActionButtonType
.
ACTION_BUTTON_TYPE_CLOSE
}
],
wantAgent
:
{
pkgName
:
"
com.example.device
"
,
abilityName
:
"
com.example.device.MainAbility
"
},
maxScreenWantAgent
:
{
pkgName
:
"
com.example.device
"
,
abilityName
:
"
com.example.device.MainAbility
"
},
title
:
"
this is title
"
,
content
:
"
this is content
"
,
expiredContent
:
"
this reminder has expired
"
,
notificationId
:
100
,
slotType
:
notification
.
SlotType
.
SOCIAL_COMMUNICATION
}
// 日历实例定义:
let
calendar
:
reminderAgentManager
.
ReminderRequestCalendar
=
{
reminderType
:
reminderAgentManager
.
ReminderType
.
REMINDER_TYPE_CALENDAR
,
dateTime
:
{
year
:
2050
,
month
:
7
,
day
:
30
,
hour
:
11
,
minute
:
14
,
second
:
30
},
repeatMonths
:
[
1
],
repeatDays
:
[
1
],
actionButton
:
[
{
title
:
"
close
"
,
type
:
reminderAgentManager
.
ActionButtonType
.
ACTION_BUTTON_TYPE_CLOSE
},
{
title
:
"
snooze
"
,
type
:
reminderAgentManager
.
ActionButtonType
.
ACTION_BUTTON_TYPE_SNOOZE
},
],
wantAgent
:
{
pkgName
:
"
com.example.device
"
,
abilityName
:
"
com.example.device.MainAbility
"
},
maxScreenWantAgent
:
{
pkgName
:
"
com.example.device
"
,
abilityName
:
"
com.example.device.MainAbility
"
},
ringDuration
:
5
,
snoozeTimes
:
2
,
timeInterval
:
5
,
title
:
"
this is title
"
,
content
:
"
this is content
"
,
expiredContent
:
"
this reminder has expired
"
,
snoozeContent
:
"
remind later
"
,
notificationId
:
100
,
slotType
:
notification
.
SlotType
.
SOCIAL_COMMUNICATION
}
// 闹钟实例定义:
let
alarm
:
reminderAgentManager
.
ReminderRequestAlarm
=
{
reminderType
:
reminderAgentManager
.
ReminderType
.
REMINDER_TYPE_ALARM
,
hour
:
11
,
minute
:
14
,
daysOfWeek
:
[
0
],
actionButton
:
[
{
title
:
"
close
"
,
type
:
reminderAgentManager
.
ActionButtonType
.
ACTION_BUTTON_TYPE_CLOSE
},
{
title
:
"
snooze
"
,
type
:
reminderAgentManager
.
ActionButtonType
.
ACTION_BUTTON_TYPE_SNOOZE
},
],
wantAgent
:
{
pkgName
:
"
com.example.device
"
,
abilityName
:
"
com.example.device.MainAbility
"
},
maxScreenWantAgent
:
{
pkgName
:
"
com.example.device
"
,
abilityName
:
"
com.example.device.MainAbility
"
},
ringDuration
:
5
,
snoozeTimes
:
2
,
timeInterval
:
5
,
title
:
"
this is title
"
,
content
:
"
this is content
"
,
expiredContent
:
"
this reminder has expired
"
,
snoozeContent
:
"
remind later
"
,
notificationId
:
100
,
slotType
:
notification
.
SlotType
.
SOCIAL_COMMUNICATION
}
@
Entry
@
Component
struct
Index
{
@
State
message
:
string
=
'
test
'
publishReminder
()
{
try
{
reminderAgentManager
.
publishReminder
(
timer
).
then
(
res
=>
{
console
.
log
(
"
publishReminder promise reminderId:
"
+
res
);
}).
catch
(
err
=>
{
console
.
log
(
"
publishReminder err code:
"
+
err
.
code
+
"
message:
"
+
err
.
message
);
})
}
catch
(
error
)
{
console
.
log
(
"
publishReminder code:
"
+
error
.
code
+
"
message:
"
+
error
.
message
);
};
}
build
()
{
Row
()
{
Column
()
{
Text
(
"
Index
"
)
.
fontSize
(
50
)
.
fontWeight
(
FontWeight
.
Bold
)
Button
()
{
Text
(
'
倒计时提醒代理
'
).
fontSize
(
25
).
fontWeight
(
FontWeight
.
Bold
)
}.
type
(
ButtonType
.
Capsule
)
.
margin
({
top
:
10
}).
backgroundColor
(
'
#0D9FFB
'
).
width
(
250
).
height
(
40
)
.
onClick
(()
=>
{
// 示例通过按钮控制提醒代理的发布
this
.
publishReminder
();
})
}
.
width
(
'
100%
'
)
}
.
height
(
'
100%
'
)
}
}
```
## 相关实例
基于后台代理提醒开发,有以下相关实例可供参考:
-
[
`AlarmClock`:后台代理提醒(ArkTS)(API8)
](
https://gitee.com/openharmony/app_samples/tree/master/Notification/AlarmClock
)
-
[
`FlipClock`:翻页时钟(ArkTS)(API8)(Full SDK)
](
https://gitee.com/openharmony/applications_app_samples/tree/master/CompleteApps/FlipClock
)
-
[
闹钟应用(ArkTS)(API9)
](
https://gitee.com/openharmony/codelabs/tree/master/CommonEventAndNotification/AlarmClock
)
\ No newline at end of file
zh-cn/application-dev/task-management/background-agent-scheduled-reminder-overview.md
已删除
100644 → 0
浏览文件 @
857105d3
# 后台代理提醒概述
OpenHarmony设计了相关的后台活动规范。三方应用退后台后如果没有执行相关的后台任务,会被挂起。而对于某些应用,可能需要在某些指定的时刻,处理一些工作。如购物类应用,可能需要在某些时间点,提醒用户有抢购活动可以参加。此类功能通常的实现是应用使用定时器,在时间达到后,由系统拉起应用,执行相关的任务。但是给应用开放了定时器的功能,可能会造成这个机制被滥用,导致后台被挂起的应用频繁地用定时器唤醒。为了避免恶意的后台活动,同时满足应用的业务诉求,设计了后台代理提醒功能。
开发者在应用开发时,使用后台代理提醒能力后,应用可以被挂起或退出,计时和弹出提醒的功能将被后台系统服务代理。避免的应用被频繁唤醒的问题,有助于降低功耗。
## 提醒实例类型
-
**倒计时类型**
:基于倒计时的提醒功能,适用于短时的计时提醒业务。
-
**日历类型**
:基于日历的提醒功能,适用于较长时间的提醒业务。
-
**闹钟类型**
:基于时钟的提醒功能,应用可以使用此功能,实现闹钟相关的业务。
zh-cn/application-dev/task-management/figures/zh-cn_image_0000001416585578.png
0 → 100644
浏览文件 @
3c8b7696
223.2 KB
zh-cn/application-dev/task-management/reminder-agent-development.md
0 → 100644
浏览文件 @
3c8b7696
# 后台代理提醒开发指导
## 接口说明
后台代理提醒功能主要提供后台提醒通知发布接口,开发者可调用这些接口创建定时提醒,包括倒计时、日历、闹钟三种提醒类型。
[
reminderAgentManager
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-reminderAgentManager.md
)
封装了发布、取消提醒通知的方法。
**表1**
reminderAgentManager主要接口
| 接口名 | 描述 |
| -------- | -------- |
| publishReminder(reminderReq:
ReminderRequest,
callback:
AsyncCallback
<
number
>
):
void
<br/>
publishReminder(reminderReq:
ReminderRequest):
Promise
<
number
>
| 发布一个定时提醒类通知。
<br/>
-
单个应用有效的提醒个数最多支持30个(不包括已经超时,即后续不会再提醒的提醒实例)。
<br/>
-
整个系统有效的提醒个数最多支持2000个(不包括已经超时,即后续不会再提醒的提醒实例)。 |
| cancelReminder(reminderId:
number,
callback:
AsyncCallback
<
void
>
):
void
<br/>
cancelReminder(reminderId:
number):
Promise
<
void
>
| 取消一个指定的提醒类通知(reminderId从publishReminder的返回值获取)。 |
| getValidReminders(callback:
AsyncCallback
<
Array
<
ReminderRequest
>>
):
void
<br/>
getValidReminders():
Promise
<
Array
<
ReminderRequest
>>
| 获取当前应用设置的所有有效的提醒。 |
| cancelAllReminders(callback:
AsyncCallback
<
void
>
):
void
<br/>
cancelAllReminders():
Promise
<
void
>
| 取消当前应用设置的所有提醒。 |
| addNotificationSlot(slot:
NotificationSlot,
callback:
AsyncCallback
<
void
>
):
void
<br/>
addNotificationSlot(slot:
NotificationSlot):
Promise
<
void
>
| 注册一个提醒类需要使用的NotificationSlot。 |
| removeNotificationSlot(slotType:
notification.SlotType,
callback:
AsyncCallback
<
void
>
):
void
<br/>
removeNotificationSlot(slotType:
notification.SlotType):
Promise
<
void
>
| 删除指定类型的NotificationSlot。 |
## 开发步骤
1.
申请
`ohos.permission.PUBLISH_AGENT_REMINDER`
权限,配置方式请参阅
[
访问控制授权申请指导
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/accesstoken-guidelines.md#stage%E6%A8%A1%E5%9E%8B
)
。
2.
[
使能通知开关
](
notification-enable.md
)
,获得用户授权后,才能使用代理提醒功能。
3.
导入模块。
```
import reminderAgentManager from '@ohos.reminderAgentManager';
import NotificationManager from '@ohos.notificationManager';
```
4.
定义目标提醒代理。开发者根据实际需要,选择定义如下类型的提醒。
-
定义倒计时实例。
```
let targetReminderAgent: reminderAgentManager.ReminderRequestTimer = {
reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_TIMER, // 提醒类型为倒计时类型
triggerTimeInSeconds: 10,
actionButton: [ // 设置弹出的提醒通知信息上显示的按钮类型和标题,支持“关闭”和“延迟”两种类型,其中“延迟”按钮类型需要与snoozeTimes和timeInterval参数结合使用
{
title: 'close',
type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
}
],
wantAgent: { // 点击提醒通知后跳转的目标UIAbility信息
pkgName: 'com.example.myapplication',
abilityName: 'EntryAbility'
},
maxScreenWantAgent: { // 全屏显示提醒到达时自动拉起的目标Ability信息
pkgName: 'com.example.myapplication',
abilityName: 'EntryAbility'
},
title: 'this is title', // 指明提醒标题
content: 'this is content', // 指明提醒内容
expiredContent: 'this reminder has expired', // 指明提醒过期后需要显示的内容
notificationId: 100, // 指明提醒使用的通知的ID号,相同ID号的提醒会覆盖
slotType: NotificationManager.SlotType.SOCIAL_COMMUNICATION // 指明提醒的Slot类型
}
```
-
定义日历实例。
```
let targetReminderAgent: reminderAgentManager.ReminderRequestCalendar = {
reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_CALENDAR, // 提醒类型为日历类型
dateTime: { // 指明提醒的目标时间
year: 2023,
month: 7,
day: 30,
hour: 11,
minute: 14,
second: 30
},
repeatMonths: [1], // 指明重复提醒的月份
repeatDays: [1], // 指明重复提醒的日期
actionButton: [ // 设置弹出的提醒通知信息上显示的按钮类型和标题,支持“关闭”和“延迟”两种类型,其中“延迟”按钮类型需要与snoozeTimes和timeInterval参数结合使用
{
title: 'close',
type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
},
{
title: 'snooze',
type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_SNOOZE
},
],
wantAgent: { // 点击提醒通知后跳转的目标UIAbility信息
pkgName: 'com.example.myapplication',
abilityName: 'EntryAbility'
},
maxScreenWantAgent: { // 点击提醒通知后跳转的目标UIAbility信息
pkgName: 'com.example.myapplication',
abilityName: 'EntryAbility'
},
ringDuration: 5, // 指明响铃时长(单位:秒)
snoozeTimes: 2, // 指明延迟提醒次数
timeInterval: 5, // 执行延迟提醒间隔(单位:秒)
title: 'this is title', // 指明提醒标题
content: 'this is content', // 指明提醒内容
expiredContent: 'this reminder has expired', // 指明提醒过期后需要显示的内容
snoozeContent: 'remind later', // 指明延迟提醒时需要显示的内容
notificationId: 100, // 指明提醒使用的通知的ID号,相同ID号的提醒会覆盖
slotType: NotificationManager.SlotType.SOCIAL_COMMUNICATION // 指明提醒的Slot类型
}
```
-
定义闹钟实例。
```
let targetReminderAgent: reminderAgentManager.ReminderRequestAlarm = {
reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_ALARM, // 提醒类型为闹钟类型
hour: 23, // 指明提醒的目标时刻
minute: 9, // 指明提醒的目标分钟
daysOfWeek: [2], // 指明每周哪几天需要重复提醒
actionButton: [ // 设置弹出的提醒通知信息上显示的按钮类型和标题,支持“关闭”和“延迟”两种类型,其中“延迟”按钮类型需要与snoozeTimes和timeInterval参数结合使用
{
title: 'close',
type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
},
{
title: 'snooze',
type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_SNOOZE
},
],
wantAgent: { // 点击提醒通知后跳转的目标UIAbility信息
pkgName: 'com.example.myapplication',
abilityName: 'EntryAbility'
},
maxScreenWantAgent: { // 点击提醒通知后跳转的目标UIAbility信息
pkgName: 'com.example.myapplication',
abilityName: 'EntryAbility'
},
ringDuration: 5, // 指明响铃时长(单位:秒)
snoozeTimes: 2, // 指明延迟提醒次数
timeInterval: 5, // 执行延迟提醒间隔(单位:秒)
title: 'this is title', // 指明提醒标题
content: 'this is content', // 指明提醒内容
expiredContent: 'this reminder has expired', // 指明提醒过期后需要显示的内容
snoozeContent: 'remind later', // 指明延迟提醒时需要显示的内容
notificationId: 99, // 指明提醒使用的通知的ID号,相同ID号的提醒会覆盖
slotType: NotificationManager.SlotType.SOCIAL_COMMUNICATION // 指明提醒的Slot类型
}
```
5.
发布相应的提醒代理。代理发布后,应用即可使用后台代理提醒功能。
```
try {
reminderAgentManager.publishReminder(targetReminderAgent).then(res => {
console.info('publishReminder promise reminderId: ' + res);
let reminderId: number = res;
// ...
}).catch(err => {
console.info('publishReminder err code: ' + err.code + ' message:' + err.message);
})
} catch (error) {
console.info('publishReminder code: ' + error.code + ' message:' + error.message);
}
```
以闹钟为例,运行效果如下图所示。
!
[
zh-cn_image_0000001416585578
](
figures/zh-cn_image_0000001416585578.png
)
6.
若需要删除提醒任务,可以通过调用
[
reminderAgentManager.cancelReminder()
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-reminderAgentManager.md#reminderagentmanagercancelreminder
)
方法来实现。
```
let reminderId = 0; // reminderId的值从发布提醒代理成功之后的回调中获得
try {
reminderAgentManager.cancelReminder(reminderId).then(() => {
console.log("cancelReminder promise");
}).catch(err => {
console.log("promise err code: " + err.code + ", message:" + err.message);
});
} catch (error) {
console.log("cancelReminder code: " + error.code + ", message: " + error.message);
};
```
zh-cn/application-dev/task-management/reminder-agent-overview.md
0 → 100644
浏览文件 @
3c8b7696
# 后台代理提醒概述
为保障用户体验,OpenHarmony对后台应用进程进行了有序治理,应用程序不能随意驻留在后台,同时应用后台行为受到严格管理,防止恶意应用行为。但对于某些退居后台或已退出的应用,可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求,OpenHarmony提供后台代理提醒功能,在应用退居后台或退出后,计时和提醒通知功能被系统后台代理接管。
后台代理提醒业务类型:
-
倒计时类:基于倒计时的提醒功能,适用于短时的计时提醒业务。
-
日历类:基于日历的提醒功能,适用于较长时间的提醒业务。
-
闹钟类:基于时钟的提醒功能,适用于闹钟相关业务。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录