1# ringtonePlayer (铃声播放器)(系统接口)
2
3铃声播放器提供了系统铃声的播放、配置、获取信息等功能。
4
5ringtonePlayer需要和[@ohos.multimedia.systemSoundManager](js-apis-systemSoundManager-sys.md)配合使用,才能完成管理系统铃声的功能。
6
7> **说明:**
8>
9> - 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
10> - 本模块接口为系统接口。
11
12## 导入模块
13
14```ts
15import { systemSoundManager } from '@kit.AudioKit';
16```
17
18## RingtoneOptions
19
20铃声参数选项。
21
22**系统接口:** 该接口为系统接口
23
24**系统能力:** SystemCapability.Multimedia.SystemSound.Core
25
26| 名称      | 类型            |必填   | 说明                              |
27| --------- | -------------- | ---- | --------------------------------- |
28| volume    | number         | 是   | 指定的相对音量大小,取值范围为[0.00, 1.00],1表示最大音量,即100%。 |
29| loop      | boolean        | 是   | 是否开启循环播放,true表示开启循环播放,false表示不开启循环播放。 |
30
31## RingtonePlayer
32
33系统铃声播放器,提供系统铃声的参数设置、参数获取、播放、停止等功能。在调用RingtonePlayer的接口前,需要先通过[getSystemRingtonePlayer](js-apis-systemSoundManager-sys.md#getsystemringtoneplayer)创建实例。
34
35### 属性
36
37**系统接口:** 该接口为系统接口
38
39**系统能力:** SystemCapability.Multimedia.SystemSound.Core
40
41| 名称  | 类型                        | 可读 | 可写 | 说明               |
42| ----- | -------------------------- | ---- | ---- | ------------------ |
43| state | [media.AVPlayerState](../apis-media-kit/js-apis-media.md#avplayerstate9) | 是   | 否   | 音频渲染器的状态。 |
44
45**示例:**
46
47```ts
48import { media } from '@kit.MediaKit';
49let state: media.AVPlayerState = systemRingtonePlayer.state;
50```
51
52### getTitle
53
54getTitle(callback: AsyncCallback<string>): void
55
56获取铃声标题,使用callback方式异步返回结果。
57
58**系统接口:** 该接口为系统接口
59
60**系统能力:** SystemCapability.Multimedia.SystemSound.Core
61
62**参数:**
63
64| 参数名   | 类型                                      | 必填 | 说明                       |
65| -------- | -----------------------------------------| ---- | ------------------------- |
66| callback | AsyncCallback<string>              | 是   | 回调返回获取的铃声标题。     |
67
68**示例:**
69
70```ts
71import { BusinessError } from '@kit.BasicServicesKit';
72
73systemRingtonePlayer.getTitle((err: BusinessError, value: string) => {
74  if (err) {
75    console.error(`Failed to get system ringtone title. ${err}`);
76    return;
77  }
78  console.info(`Callback invoked to indicate the value of the system ringtone title is obtained ${value}.`);
79});
80```
81
82### getTitle
83
84getTitle(): Promise<string>
85
86获取铃声标题,使用Promise方式异步返回结果。
87
88**系统接口:** 该接口为系统接口
89
90**系统能力:** SystemCapability.Multimedia.SystemSound.Core
91
92**返回值:**
93
94| 类型                  | 说明                              |
95| --------------------- | -------------------------------- |
96| Promise<string> | Promise回调返回获取的系统铃声标题。 |
97
98**示例:**
99
100```ts
101import { BusinessError } from '@kit.BasicServicesKit';
102
103systemRingtonePlayer.getTitle().then((value: string) => {
104  console.info(`Promise returned to indicate that the value of the system ringtone title is obtained ${value}.`);
105}).catch ((err: BusinessError) => {
106  console.error(`Failed to get the system ringtone title ${err}`);
107});
108```
109
110### getAudioRendererInfo
111
112getAudioRendererInfo(callback: AsyncCallback<audio.AudioRendererInfo>): void
113
114获取铃声使用的AudioRendererInfo,使用callback方式异步返回结果。
115
116**系统接口:** 该接口为系统接口
117
118**系统能力:** SystemCapability.Multimedia.SystemSound.Core
119
120**参数:**
121
122| 参数名   | 类型                                      | 必填 | 说明                       |
123| -------- | -----------------------------------------| ---- | ------------------------- |
124| callback | AsyncCallback<[audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8)> | 是 | 回调返回获取的AudioRendererInfo。 |
125
126**示例:**
127
128```ts
129import { audio } from '@kit.AudioKit';
130import { BusinessError } from '@kit.BasicServicesKit';
131
132let audioRendererInfo: audio.AudioRendererInfo | undefined = undefined;
133
134systemRingtonePlayer.getAudioRendererInfo((err: BusinessError, value: audio.AudioRendererInfo) => {
135  if (err) {
136    console.error(`Failed to get ringtone AudioRendererInfo. ${err}`);
137    return;
138  }
139  console.info(`Callback invoked to indicate the value of the ringtone AudioRendererInfo is obtained.`);
140  audioRendererInfo = value;
141});
142```
143
144### getAudioRendererInfo
145
146getAudioRendererInfo(): Promise<audio.AudioRendererInfo>
147
148获取铃声使用的AudioRendererInfo,使用Promise方式异步返回结果。
149
150**系统接口:** 该接口为系统接口
151
152**系统能力:** SystemCapability.Multimedia.SystemSound.Core
153
154**返回值:**
155
156| 类型                | 说明                            |
157| ------------------- | ------------------------------- |
158| Promise<[audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8)> | Promise回调返回获取的AudioRendererInfo。 |
159
160**示例:**
161
162```ts
163import { audio } from '@kit.AudioKit';
164import { BusinessError } from '@kit.BasicServicesKit';
165
166let audioRendererInfo: audio.AudioRendererInfo | undefined = undefined;
167
168systemRingtonePlayer.getAudioRendererInfo().then((value: audio.AudioRendererInfo) => {
169  console.info(`Promise returned to indicate that the value of the ringtone AudioRendererInfo is obtained ${value}.`);
170  audioRendererInfo = value;
171}).catch ((err: BusinessError) => {
172  console.error(`Failed to get the ringtone AudioRendererInfo ${err}`);
173});
174```
175
176### configure
177
178configure(options: RingtoneOptions, callback: AsyncCallback<void>): void
179
180配置铃声播放参数,使用callback方式异步返回结果。
181
182**系统接口:** 该接口为系统接口
183
184**系统能力:** SystemCapability.Multimedia.SystemSound.Core
185
186**参数:**
187
188| 参数名   | 类型                                      | 必填 | 说明                       |
189| -------- | -----------------------------------------| ---- | ------------------------- |
190| options  | [RingtoneOptions](#ringtoneoptions)      | 是   | 指定铃声参数。             |
191| callback | AsyncCallback<void>                | 是   | 回调返回配置参数成功或失败。 |
192
193**示例:**
194
195```ts
196import { BusinessError } from '@kit.BasicServicesKit';
197
198class RingtoneOptions {
199  volume: number = 0;
200  loop: boolean = false;
201}
202let ringtoneOptions: RingtoneOptions = {volume: 0.5, loop: true};
203
204systemRingtonePlayer.configure(ringtoneOptions, (err: BusinessError) => {
205  if (err) {
206    console.error(`Failed to configure ringtone options. ${err}`);
207    return;
208  }
209  console.info(`Callback invoked to indicate a successful setting of ringtone options.`);
210});
211```
212
213### configure
214
215configure(options: RingtoneOptions): Promise<void>
216
217配置铃声播放参数,使用Promise方式异步返回结果。
218
219**系统接口:** 该接口为系统接口
220
221**系统能力:** SystemCapability.Multimedia.SystemSound.Core
222
223**参数:**
224
225| 参数名   | 类型                                      | 必填 | 说明                       |
226| -------- | -----------------------------------------| ---- | ------------------------- |
227| options  | [RingtoneOptions](#ringtoneoptions)      | 是   | 指定铃声参数。              |
228
229**返回值:**
230
231| 类型                | 说明                            |
232| ------------------- | ------------------------------- |
233| Promise<void> | Promise回调返回配置参数成功或失败。 |
234
235**示例:**
236
237```ts
238import { BusinessError } from '@kit.BasicServicesKit';
239
240class RingtoneOptions {
241  volume: number = 0;
242  loop: boolean = false;
243}
244let ringtoneOptions: RingtoneOptions = {volume: 0.5, loop: true};
245
246systemRingtonePlayer.configure(ringtoneOptions).then(() => {
247  console.info(`Promise returned to indicate a successful setting of ringtone options.`);
248}).catch ((err: BusinessError) => {
249  console.error(`Failed to configure ringtone options. ${err}`);
250});
251```
252
253### start
254
255start(callback: AsyncCallback<void>): void
256
257开始播放铃声,使用callback方式异步返回结果。
258
259**系统接口:** 该接口为系统接口
260
261**系统能力:** SystemCapability.Multimedia.SystemSound.Core
262
263**参数:**
264
265| 参数名   | 类型                                      | 必填 | 说明                       |
266| -------- | -----------------------------------------| ---- | ------------------------- |
267| callback | AsyncCallback<void>                | 是   | 回调返回开始播放成功或失败。 |
268
269**示例:**
270
271```ts
272import { BusinessError } from '@kit.BasicServicesKit';
273
274systemRingtonePlayer.start((err: BusinessError) => {
275  if (err) {
276    console.error(`Failed to start playing ringtone. ${err}`);
277    return;
278  }
279  console.info(`Callback invoked to indicate a successful starting of ringtone.`);
280});
281```
282
283### start
284
285start(): Promise<void>
286
287开始播放铃声,使用Promise方式异步返回结果。
288
289**系统接口:** 该接口为系统接口
290
291**系统能力:** SystemCapability.Multimedia.SystemSound.Core
292
293**返回值:**
294
295| 类型                | 说明                              |
296| ------------------- | -------------------------------- |
297| Promise<void> | Promise回调返回开始播放成功或失败。 |
298
299**示例:**
300
301```ts
302import { BusinessError } from '@kit.BasicServicesKit';
303
304systemRingtonePlayer.start().then(() => {
305  console.info(`Promise returned to indicate a successful starting of ringtone.`);
306}).catch ((err: BusinessError) => {
307  console.error(`Failed to start playing ringtone. ${err}`);
308});
309```
310
311### stop
312
313stop(callback: AsyncCallback<void>): void
314
315停止播放铃声,使用callback方式异步返回结果。
316
317**系统接口:** 该接口为系统接口
318
319**系统能力:** SystemCapability.Multimedia.SystemSound.Core
320
321**参数:**
322
323| 参数名   | 类型                                      | 必填 | 说明                       |
324| -------- | -----------------------------------------| ---- | ------------------------- |
325| callback | AsyncCallback<void>                | 是   | 回调返回停止播放成功或失败。 |
326
327**示例:**
328
329```ts
330import { BusinessError } from '@kit.BasicServicesKit';
331
332systemRingtonePlayer.stop((err: BusinessError) => {
333  if (err) {
334    console.error(`Failed to stop playing ringtone. ${err}`);
335    return;
336  }
337  console.info(`Callback invoked to indicate a successful stopping of ringtone.`);
338});
339```
340
341### stop
342
343stop(): Promise<void>
344
345停止播放铃声,使用Promise方式异步返回结果。
346
347**系统接口:** 该接口为系统接口
348
349**系统能力:** SystemCapability.Multimedia.SystemSound.Core
350
351**返回值:**
352
353| 类型                | 说明                              |
354| ------------------- | -------------------------------- |
355| Promise<void> | Promise回调返回停止播放成功或失败。 |
356
357**示例:**
358
359```ts
360import { BusinessError } from '@kit.BasicServicesKit';
361
362systemRingtonePlayer.stop().then(() => {
363  console.info(`Promise returned to indicate a successful stopping of ringtone.`);
364}).catch ((err: BusinessError) => {
365  console.error(`Failed to stop playing ringtone. ${err}`);
366});
367```
368
369### release
370
371release(callback: AsyncCallback<void>): void
372
373释放铃声播放器,使用callback方式异步返回结果。
374
375**系统接口:** 该接口为系统接口
376
377**系统能力:** SystemCapability.Multimedia.SystemSound.Core
378
379**参数:**
380
381| 参数名   | 类型                                      | 必填 | 说明                       |
382| -------- | -----------------------------------------| ---- | ------------------------- |
383| callback | AsyncCallback<void>                | 是   | 回调返回释放成功或失败。     |
384
385**示例:**
386
387```ts
388import { BusinessError } from '@kit.BasicServicesKit';
389
390systemRingtonePlayer.release((err: BusinessError) => {
391  if (err) {
392    console.error(`Failed to release ringtone player. ${err}`);
393    return;
394  }
395  console.info(`Callback invoked to indicate a successful releasing of ringtone player.`);
396});
397```
398
399### release
400
401release(): Promise<void>
402
403释放铃声播放器,使用Promise方式异步返回结果。
404
405**系统接口:** 该接口为系统接口
406
407**系统能力:** SystemCapability.Multimedia.SystemSound.Core
408
409**返回值:**
410
411| 类型                | 说明                            |
412| ------------------- | ------------------------------- |
413| Promise<void> | Promise回调返回释放成功或失败。   |
414
415**示例:**
416
417```ts
418import { BusinessError } from '@kit.BasicServicesKit';
419
420systemRingtonePlayer.release().then(() => {
421  console.info(`Promise returned to indicate a successful releasing of ringtone player.`);
422}).catch ((err: BusinessError) => {
423  console.error(`Failed to release ringtone player. ${err}`);
424});
425```
426
427### on('audioInterrupt')
428
429on(type: 'audioInterrupt', callback: Callback<audio.InterruptEvent>): void
430
431监听音频中断事件(当音频焦点发生变化时触发),使用callback方式返回结果。
432
433**系统接口:** 该接口为系统接口
434
435**系统能力:** SystemCapability.Multimedia.SystemSound.Core
436
437**参数:**
438
439| 参数名   | 类型                     | 必填 | 说明                                                                       |
440| -------- | ----------------------- | ---- | -------------------------------------------------------------------------- |
441| type     | string                  | 是   | 监听事件,固定为:'audioInterrupt'。 |
442| callback | Callback<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 是   | 回调函数,返回播放中断时,应用接收的中断事件信息。 |
443
444**错误码:**
445
446以下错误码的详细介绍请参见[音频错误码](errorcode-audio.md)。
447
448| 错误码ID | 错误信息 |
449| ------- | --------------------------------------------|
450| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
451| 6800101 | Parameter verification failed. |
452
453**示例:**
454
455```ts
456import { audio } from '@kit.AudioKit';
457
458let isPlaying: boolean; // 标识符,表示是否正在渲染
459let isDucked: boolean; // 标识符,表示是否被降低音量
460
461systemRingtonePlayer.on('audioInterrupt', async(interruptEvent: audio.InterruptEvent) => {
462  if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) {
463    // 由系统进行操作,强制打断音频渲染,应用需更新自身状态及显示内容等
464    switch (interruptEvent.hintType) {
465      case audio.InterruptHint.INTERRUPT_HINT_PAUSE:
466        // 音频流已被暂停,临时失去焦点,待可重获焦点时会收到resume对应的interruptEvent
467        console.info('Force paused. Update playing status and stop writing');
468        isPlaying = false; // 简化处理,代表应用切换至暂停状态的若干操作
469        break;
470      case audio.InterruptHint.INTERRUPT_HINT_STOP:
471        // 音频流已被停止,永久失去焦点,若想恢复渲染,需用户主动触发
472        console.info('Force stopped. Update playing status and stop writing');
473        isPlaying = false; // 简化处理,代表应用切换至暂停状态的若干操作
474        break;
475      case audio.InterruptHint.INTERRUPT_HINT_DUCK:
476        // 音频流已被降低音量渲染
477        console.info('Force ducked. Update volume status');
478        isDucked = true; // 简化处理,代表应用更新音量状态的若干操作
479        break;
480      case audio.InterruptHint.INTERRUPT_HINT_UNDUCK:
481        // 音频流已被恢复正常音量渲染
482        console.info('Force ducked. Update volume status');
483        isDucked = false; // 简化处理,代表应用更新音量状态的若干操作
484        break;
485      default:
486        break;
487    }
488  } else if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_SHARE) {
489    // 由应用进行操作,应用可以自主选择响应操作或忽略该事件
490    switch (interruptEvent.hintType) {
491      case audio.InterruptHint.INTERRUPT_HINT_RESUME:
492        // 建议应用继续渲染(说明音频流此前被强制暂停,临时失去焦点,现在可以恢复渲染)
493        console.info('Resume force paused renderer or ignore');
494        // 若选择继续渲染,需在此处主动执行开始渲染的若干操作
495        break;
496      default:
497        break;
498    }
499  }
500});
501```
502
503### off('audioInterrupt') <sup>10+</sup>
504
505off(type: 'audioInterrupt'): void
506
507取消监听音频中断事件。
508
509**系统接口:** 该接口为系统接口
510
511**系统能力:** SystemCapability.Multimedia.SystemSound.Core
512
513**参数:**
514
515| 参数名 | 类型   | 必填 | 说明                                              |
516| :----- | :----- | :--- | :------------------------------------------------ |
517| type   | string | 是   | 监听事件,固定为:'audioInterrupt'。 |
518
519**错误码:**
520
521以下错误码的详细介绍请参见[音频错误码](errorcode-audio.md)。
522
523| 错误码ID | 错误信息 |
524| ------- | --------------------------------------------|
525| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
526| 6800101 | Parameter verification failed. |
527
528**示例:**
529
530```ts
531systemRingtonePlayer.off('audioInterrupt');
532```
533