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
相关产品推荐
相关产品推荐

