问题背景

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

实现方案

正在发声的耳机不可用后(有线耳机断开、蓝牙开关关闭、蓝牙耳机入盒、多连接耳机被抢占等),应用通过监听设备变更事件并对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();
    }
  }
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐