aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/archive/b2g_os/api/alarm_api/index.html
blob: bc686238e27f70cc5ee30d8df15ba227b67c2bcf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
---
title: Alarm API
slug: Archive/B2G_OS/API/Alarm_API
tags:
  - API
  - Firefox OS
  - 警报
translation_of: Archive/B2G_OS/API/Alarm_API
---
<p>{{DefaultAPISidebar("Alarm API")}}{{Non-standard_Header}}</p>

<p class="summary"><strong>Alarm API</strong>允许应用程序<strong>设定</strong>将来运行的操作。例如,一些应用程序(如闹钟、日历或自动更新)可能需要使用<strong>Alarm API</strong>在指定的时间点触发特定的设备行为。</p>

<p class="summary"><strong>Alarm API</strong>本身只允许调度警报。<strong>Alarm </strong>通过系统消息API发送到应用程序,因此希望对警报作出响应的应用程序必须将自己注册到<strong>Alarm </strong>消息中。</p>

<p><strong>Alarm </strong>使用 {{DOMxRef("Navigator.mozAlarms")}}对象设置,该对象是{{DOMxRef("MozAlarmsManager")}}接口的一个实例。</p>

<div class="blockIndicator note">
<p><em><strong>注:</strong></em> 这里的‘“闹钟 ”(<strong>Alarm API</strong>)并不同于闹铃App。<strong>Alarm API </strong>唤醒应用程序, 闹钟叫醒人. 闹钟 <a href="https://github.com/mozilla-b2g/gaia/blob/master/apps/clock/js/alarm.js">使用 Alarm API</a> 设置通知,用来在正确的时间叫醒人。(译者注:疑问脸)</p>
</div>

<h2 id="example" name="example">设置闹铃</h2>

<p>使用闹铃时要做的第一件事是设置闹铃。根据时区的不同,有两种警报。在这两种情况下,它都是使用{{DOMxRef("MozAlarmsManager.add()")}}方法完成的。</p>

<div class="blockIndicator note">
<p><strong>Note:</strong> 如果警报不是针对特定应用程序的,系统会将所有警报发送给所有监听警报的应用程序。</p>
</div>

<div class="blockIndicator note">
<p><strong>Note</strong>: 您需要使用相同的<strong>URL</strong>来设置和接收警报。例如,如果在foo.html或index.html?foo=bar上调用<code>navigator.mozAlarms.add()</code>,但在<a href="/en-US/Apps/Build/Manifest#messages">清单消息字段</a>中有<code style="white-space: nowrap;">{ "alarm": "/index.html" }</code>,您将永远不会收到警报。</p>
</div>

<h3 id="Alarms_忽略时区">Alarms 忽略时区</h3>

<p>这类警报是根据设备的本地时间发出的。如果设备用户更改了时区,将根据新的时区发出警报。例如,如果用户在巴黎,设置了一个应该在CET(中欧时间)下午12点发出的警报,而该用户前往旧金山,那么该警报将在PDT(太平洋夏令时)下午12点发出。</p>

<pre class="brush: js;">// 设定闹钟的日期
var myDate  = new Date("May 15, 2012 16:20:00");

// 传递给警报的任意数据
var data    = {
  foo: "bar"
}

// 使警报忽略"ignoreTimezone"
var request = navigator.mozAlarms.add(myDate, "ignoreTimezone", data);

request.onsuccess = function () {
  console.log("The alarm has been scheduled");
};

request.onerror = function () {
  console.log("An error occurred: " + this.error.name);
};</pre>

<h3 id="时区警报">时区警报</h3>

<p>这些类型的警报是根据定义警报计划时间的时区中的时间发出的。如果由于某种原因,设备的用户更改了时区,将根据原始时区发出警报。例如,如果用户在巴黎,并设置一个闹钟,该闹钟应该在CET(中欧时间)下午12点发出,如果该用户前往旧金山,该闹钟将在太平洋夏令时凌晨3点发出。</p>

<pre class="brush: js;">// This the date to schedule the alarm
var myDate  = new Date("May 15, 2012 16:20:00");

// This is arbitrary data pass to the alarm
var data    = {
  foo: "bar"
}

// The "honorTimezone" string is what make the alarm honoring it
var request = navigator.mozAlarms.add(myDate, "honorTimezone", data);

request.onsuccess = function () {
  console.log("The alarm has been scheduled");
};

request.onerror = function () {
  console.log("An error occurred: " + this.error.name);
};</pre>

<h2 id="管理警报">管理警报</h2>

<p> </p>

<p>设定警报后,仍然可以管理它。</p>

<p>方法将返回应用程序当前调度的警报的完整列表。这个列表是一个{{anch("mozAlarm")}}对象数组。</p>

<p> </p>

<p> </p>

<h3 id="mozAlarm">mozAlarm</h3>

<p> </p>

<p>匿名JavaScript对象,具有以下属性:</p>

<p> </p>

<p><code>id</code></p>

<p>表示警报id</p>

<p><code>date</code></p>

<p>表示警报的预定时间的日期对象</p>

<p><code>respectTimezone</code></p>

<p>一个字符串,指示警报是否必须尊重或忽略date对象的时区信息。它的值可以是<code>ignoreTimezone</code><code>honorTimezone</code></p>

<p><code>data</code></p>

<p>一个JavaScript对象,包含警报存储的所有数据</p>

<p> </p>

<pre class="brush: js;">var request = navigator.mozAlarms.getAll();

request.onsuccess = function () {
  this.result.forEach(function (alarm) {
    console.log('Id: ' + alarm.id);
    console.log('date: ' + alarm.date);
    console.log('respectTimezone: ' + alarm.respectTimezone);
    console.log('data: ' + JSON.stringify(alarm.data));
  });
};

request.onerror = function () {
  console.log("An error occurred: " + this.error.name);
};</pre>

<p>{{DOMxRef("MozAlarmsManager.remove")}} 用于取消现有警报的调度。</p>

<pre class="brush: js;">var alarmId;

// Set an alarm and store it's id
var request = navigator.mozAlarms.add(new Date("May 15, 2012 16:20:00"), "honorTimezone");

request.onsuccess = function () {
  alarmId = this.result;
}

// ...

// Later on, removing the alarm if it exists
if (alarmId) {
  navigator.mozAlarms.remove(alarmId);
}</pre>

<h2 id="处理警报">处理警报</h2>

<p> </p>

<p>当系统发出警报时,任何应用程序都可以作出反应。为了能够处理任何警报,应用程序必须将自己注册为警报处理程序。这是通过系统消息API分两个步骤完成的:</p>

<p>首先,应用程序必须将alarm包含到其应用程序清单的<a href="/en-US/docs/Apps/Manifest#messages">messages</a>属性中,并提供到文档的URL,文档注册在发出警报时使用的回调函数。</p>

<pre class="brush: js;">"messages": [
  { "alarm": "/index.html" }
]</pre>

<p>其次,应用程序必须将回调函数与警报消息绑定。这是使用{{DOMxRef("Navigator.mozSetMessageHandler()")}}方法完成的。这个回调函数将接收一个{{Anch("mozAlarm")}}对象,其中包含附加到警报的数据。</p>

<pre class="brush: js;">navigator.mozSetMessageHandler("alarm", function (mozAlarm) {
  alert("alarm fired: " + JSON.stringify(mozAlarm.data));
});</pre>

<p>如果应用程序想知道系统级别上是否存在挂起的警报,可以使用下面的方法。</p>

<pre class="brush: js;">navigator.mozHasPendingMessage("alarm"); </pre>

<h2 id="权限_Alarm_API">权限 Alarm API</h2>

<p>请注意,虽然警报API没有特权或认证,但您仍然应该在清单中包含<code>权限</code><code>消息</code>条目。当包含在可安装的打开的Web应用程序中的<code>manifest.webapp</code>文件。</p>

<pre class="brush: json;">{
  "permissions": {
    "alarms": {
      "description": "Required to schedule alarms"
    }
  },
  "messages": [
    { "alarm": "/index.html" }
  ]
}</pre>

<h2 id="规范">规范</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName("Alarm API")}}</td>
   <td>{{Spec2("Alarm API")}}</td>
   <td>Initial specification.</td>
  </tr>
 </tbody>
</table>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<p>Supported in Firefox OS 1.0.1.</p>

<h2 id="另请参阅">另请参阅</h2>

<ul>
 <li><a href="/en-US/Apps/Build/User_notifications/Using_Alarms_to_notify_users">使用警报通知用户</a></li>
 <li>{{DOMxRef("Navigator.mozAlarms")}}</li>
 <li>{{DOMxRef("MozAlarmsManager")}}</li>
 <li>{{DOMxRef("Navigator.mozSetMessageHandler")}}</li>
</ul>