You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何在iOS/Android获取可用音频设备并实现耳机扬声器切换

问题说明

你找到的代码片段属于Web端JavaScript API,其中的navigator是浏览器环境内置的全局宿主对象,仅可在Web页面运行时调用,完全不适用于Flutter原生应用开发场景。

Flutter实现音频输出设备切换的可行方案

推荐使用官方维护的audio_session包实现需求,该包可跨Android、iOS平台使用,同时兼容市面上主流的Flutter音频播放包(如audioplayers、just_audio等),操作步骤如下:

  • 第一步:在项目的pubspec.yaml中添加依赖
dependencies:
  audio_session: ^0.1.16
  # 可搭配你当前项目正在使用的音频播放包使用,无需额外替换现有播放逻辑
  • 第二步:获取可用的音频输出设备
import 'package:audio_session/audio_session.dart';

// 初始化音频会话
final audioSession = await AudioSession.instance;
// 获取当前所有已连接的音频设备
List<AudioDevice> allDevices = audioSession.devices;
// 过滤出可用的输出设备
List<AudioDevice> outputDevices = allDevices.where((device) => [
  AudioDeviceType.speaker,
  AudioDeviceType.headset,
  AudioDeviceType.bluetooth,
  AudioDeviceType.headphones
].contains(device.type)).toList();
  • 第三步:切换到指定音频输出设备
// 切换到扬声器
await audioSession.setPreferredOutputDevice(AudioDeviceType.speaker);
// 切换到耳机
await audioSession.setPreferredOutputDevice(AudioDeviceType.headset);
// 切换到蓝牙音频设备
await audioSession.setPreferredOutputDevice(AudioDeviceType.bluetooth);
  • 可选:监听音频设备插拔状态变化
audioSession.devicesChanged.listen((newDeviceList) {
  // 设备列表更新时触发,可在此处同步更新UI中的可选设备列表
});
平台适配注意事项
  • 安卓端需要在android/app/src/main/AndroidManifest.xml中添加以下权限:
<!-- 音频设置修改权限 -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- 安卓12及以上版本获取蓝牙音频设备需要 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:maxSdkVersion="33" />
  • iOS端需要在ios/Runner/Info.plist中添加音频会话相关配置,若需要在后台切换音频设备还需开启后台音频模式。

内容的提问来源于stack exchange,提问作者Janaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:39:03