问题背景

佩戴耳机观看视频,摘下耳机后,声音通过扬声器外放。

实现方案

正在发声的耳机不可用后(有线耳机断开、蓝牙开关关闭、蓝牙耳机入盒、多连接耳机被抢占等),应用通过监听设备变更事件并对AudioStreamDeviceChangeReason.REASON\_OLD\_DEVICE\_UNAVAILABLE的场景进行处理,应用需要根据使用场景选择暂停播放或使用新设备继续播放,例如为扬声器时暂停,为其他设备则继续播放。

private setOutputDeviceChangeCallback() {
  if (!this.audioRenderer) {
    return;
  }
  this.audioRenderer.on('outputDeviceChangeWithInfo', this.outputDeviceChangeCallback);
}

private outputDeviceChangeCallback: (deviceChangeInfo: audio.AudioStreamDeviceChangeInfo) => void =
  (deviceChangeInfo: audio.AudioStreamDeviceChangeInfo) => {
    Logger.info(TAG, `DeviceInfo id: ${deviceChangeInfo.devices[0].id}`);
    Logger.info(TAG, `DeviceInfo name: ${deviceChangeInfo.devices[0].name}`);
    Logger.info(TAG, `DeviceInfo address: ${deviceChangeInfo.devices[0].address}`);
    Logger.info(TAG, `Device change reason: ${deviceChangeInfo.changeReason}`);
    if (deviceChangeInfo.changeReason === audio.AudioStreamDeviceChangeReason.REASON_OLD_DEVICE_UNAVAILABLE) {
      // 旧设备不可用,暂停播放
      Logger.info(TAG, `Device change reason: ${deviceChangeInfo.changeReason}`);
      this.pause();
    }
  }

HarmonyOS码上奇行
11.9k 声望4.2k 粉丝

欢迎关注 HarmonyOS 开发者社区:[链接]