对于播放音频类的应用，开发者需要关注该应用的音频流的状态以做出相应的操作，比如监听到状态为播放中/暂停时，及时改变播放按钮的UI显示。

## 读取或监听应用内音频流状态变化

参考[使用AudioRenderer开发音频播放功能(ArkTs)](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/using-audiorenderer-for-playback)或[audio.createAudioRenderer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-f#audiocreateaudiorenderer8)，先完成AudioRenderer的创建，再通过以下两种方法查看音频流状态的变化。

* 方法1：直接查看AudioRenderer的[属性](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audiorenderer#属性)state：

  收起

  自动换行

  深色代码主题

  复制

  ```
  1. import { audio } from '@kit.AudioKit';

  3. let audioRendererState: audio.AudioState = audioRenderer.state;
  4. console.info(`Current state is: ${audioRendererState}`);
  ```
* 方法2：注册stateChange监听AudioRenderer的状态变化：

  收起

  自动换行

  深色代码主题

  复制

  ```
  1. import { audio } from '@kit.AudioKit';

  3. audioRenderer.on('stateChange', (rendererState: audio.AudioState) => {
  4. console.info(`Succeeded in using on function, state change to: ${rendererState}`);
  5. });
  ```

获取state后可对照[AudioState](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-e#audiostate8)来进行相应的操作，比如更改暂停播放按钮的显示等。

## 读取或监听所有音频流的变化

如果部分应用需要查询获取所有音频流的变化信息，可以通过AudioStreamManager读取或监听所有音频流的变化。

如下为音频流管理调用关系图：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/16/v3/VVpfYU43RaaFElmBcNT8kQ/zh-cn_image_0000002540771676.png?HW-CC-KV=V1&HW-CC-Date=20260414T051723Z&HW-CC-Expire=86400&HW-CC-Sign=177D117A753B3A33DAF2EF5E7B4283A2D7EB6E13D9FF704672577AB07E62E5C3)

在进行应用开发的过程中，开发者需要先调用[getStreamManager](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audiomanager#getstreammanager9)创建AudioStreamManager实例，进而通过该实例管理音频流。

详细API含义可参考[AudioStreamManager](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audiostreammanager)。

## 开发步骤及注意事项

1. 创建AudioStreamManager实例。

   收起

   自动换行

   深色代码主题

   复制

   ```
   1. import { audio } from '@kit.AudioKit';

   3. let audioManager = audio.getAudioManager();
   4. let audioStreamManager = audioManager.getStreamManager();
   ```
2. 使用[on('audioRendererChange')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audiostreammanager#onaudiorendererchange9)监听音频播放流的变化。 如果音频流监听应用需要在音频播放流状态变化、设备变化时获取通知，可以订阅该事件。

   收起

   自动换行

   深色代码主题

   复制

   ```
   1. import { audio } from '@kit.AudioKit';

   3. audioStreamManager.on('audioRendererChange',  (audioRendererChangeInfoArray: audio.AudioRendererChangeInfoArray) => {
   4. console.info(`Succeeded in using on function. AudioRendererChangeInfoArray: ${JSON.stringify(audioRendererChangeInfoArray)}`);
   5. });
   ```
3. （可选）使用[off('audioRendererChange')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audiostreammanager#offaudiorendererchange9)取消监听音频播放流变化。

   收起

   自动换行

   深色代码主题

   复制

   ```
   1. audioStreamManager.off('audioRendererChange');
   2. console.info('Succeeded in using off function.');
   ```
4. （可选）使用[getCurrentAudioRendererInfoArray](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audiostreammanager#getcurrentaudiorendererinfoarray9)获取所有音频播放流的信息。该接口可获取音频播放流唯一ID、音频渲染器信息以及音频播放设备信息。

   说明

   对所有音频流状态进行监听的应用需要[声明权限](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/declare-permissions)ohos.permission.USE\_BLUETOOTH，否则无法获得实际的设备名称和设备地址信息，查询到的设备名称和设备地址（蓝牙设备的相关属性）将为空字符串。

   收起

   自动换行

   深色代码主题

   复制

   ```
   1. import { audio } from '@kit.AudioKit';
   2. import { BusinessError } from '@kit.BasicServicesKit';

   4. async function getCurrentAudioRendererInfoArray(): Promise<void> {
   5. await audioStreamManager.getCurrentAudioRendererInfoArray().then((audioRendererChangeInfoArray: audio.AudioRendererChangeInfoArray) => {
   6. console.info(`Succeeded in getting current audio renderer info array. AudioRendererChangeInfoArray: ${JSON.stringify(audioRendererChangeInfoArray)}`);
   7. }).catch((err: BusinessError ) => {
   8. console.error(`Failed to get current audio renderer info array. Code: ${err.code}, message: ${err.message}`);
   9. });
   10. }
   ```