查询和监听音频输入设备
===========

本模块提供音频输入设备管理能力，包括查询输入设备信息、监听设备连接状态变化等。具体API说明可参考文档[AudioRoutingManager](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audioroutingmanager)。

以下各步骤示例为片段代码，可通过示例代码右下方链接获取[完整示例](https://gitcode.com/openharmony/applications_app_samples/blob/master/code/DocsSample/Media/Audio/AudioRoutingManagerSampleJS)。

#### 创建AudioRoutingManager实例

在使用AudioRoutingManager管理音频设备前，需要先导入模块并创建实例。

import { audio } from '@kit.AudioKit'; // 导入audio模块。

let audioManager = audio.getAudioManager(); // 需要先创建AudioManager实例。
let audioRoutingManager = audioManager.getRoutingManager(); // 再调用AudioManager的方法创建AudioRoutingManager实例。

#### 支持的音频输入设备类型

目前支持的音频输入设备见下表：

| 名称 | 值 | 说明 |
| :-- | :-- | :-- |
| WIRED\_HEADSET | 3 | 有线耳机，带麦克风。 |
| BLUETOOTH\_SCO | 7 | 蓝牙设备SCO（Synchronous Connection Oriented）连接。 |
| MIC | 15 | 麦克风。 |
| USB\_HEADSET | 22 | USB耳机，带麦克风。 |
| NEARLINK | 31 | 星闪设备。 |

#### 获取输入设备信息

使用[getDevices](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audioroutingmanager#getdevices9)方法可以获取当前所有输入设备的信息。

import { audio } from '@kit.AudioKit'; // 导入audio模块。
// ...
  audioRoutingManager.getDevices(audio.DeviceFlag.INPUT\_DEVICES\_FLAG).then((data: audio.AudioDeviceDescriptors) => {
    console.info('Promise returned to indicate that the device list is obtained.');

    // ...
  });

#### 监听设备连接状态变化

可以设置监听事件来监听设备连接状态的变化，当有设备连接或断开时触发回调：

import { audio } from '@kit.AudioKit';  // 导入audio模块。
// ...
  // 监听音频设备状态变化。
  audioRoutingManager.on('deviceChange', audio.DeviceFlag.INPUT\_DEVICES\_FLAG,
    (deviceChanged: audio.DeviceChangeAction) => {
    console.info('device change type : ' + deviceChanged.type);  // 设备连接状态变化,0为连接,1为断开连接。
    console.info('device descriptor size : ' + deviceChanged.deviceDescriptors.length);
    console.info('device change descriptor : ' + deviceChanged.deviceDescriptors\[0\].deviceRole);  // 设备角色。
    console.info('device change descriptor : ' + deviceChanged.deviceDescriptors\[0\].deviceType);  // 设备类型。

    // ...
  });
  // ...
  // 取消监听音频设备状态变化。
  audioRoutingManager.off('deviceChange', (deviceChanged: audio.DeviceChangeAction) => {
    console.info('Should be no callback.');
  });