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

Flutter中如何检测麦克风是否已被占用?

Flutter麦克风占用状态检测方案

目前Flutter官方没有提供直接检测麦克风是否被其他应用占用的跨平台API,你可以通过以下两种方案实现检测:

方案一:通用试启动检测(跨平台兼容,无需原生开发)

这个方案是行业内最常用的兼容方案,逻辑为排除权限问题后,尝试临时启动录音,根据启动结果判定是否被占用,具体实现可以配合permission_handler、record两个常用插件完成:

  • 第一步:先向用户申请麦克风权限,确认权限已被授予
  • 第二步:创建临时录音实例尝试启动,若启动抛出异常,即可判定麦克风被其他应用占用
  • 第三步:如果启动成功,立刻停止销毁临时实例,返回未占用状态

示例代码如下:

import 'package:permission_handler/permission_handler.dart';
import 'package:record/record.dart';

/// 返回true表示麦克风被其他应用占用,false表示未占用/权限未授予
Future<bool> checkMicrophoneIsOccupied() async {
  // 先校验麦克风权限
  PermissionStatus micStatus = await Permission.microphone.request();
  if (micStatus != PermissionStatus.granted) {
    return false;
  }

  final AudioRecorder tempRecorder = AudioRecorder();
  try {
    // 尝试启动临时录音,不需要实际保存文件
    await tempRecorder.start(const RecordConfig(), path: '');
    await tempRecorder.stop();
    return false;
  } catch (e) {
    // 启动失败判定为麦克风被占用
    return true;
  } finally {
    tempRecorder.dispose();
  }
}

该方案优点是适配全版本Android、iOS系统,不需要单独开发原生桥接代码;缺点是极少数定制系统不会抛出明确的占用异常,需要结合业务场景做二次校验。

方案二:原生接口检测(检测结果更精准)

如果需要更精准的检测结果,可以分别在Android、iOS原生层实现检测逻辑,通过MethodChannel把结果传递给Flutter层:

  • Android端:Android 12(API 31)及以上系统可以通过AudioManager.getActiveRecordingConfigurations()方法获取当前正在录音的应用列表,列表不为空即判定为麦克风被占用;低版本Android可以通过监听音频焦点变化、启动录音的错误回调完成检测。
  • iOS端:通过AVAudioSession.isOtherAudioPlaying属性判断是否有其他应用占用音频会话,同时捕获启动录音时抛出的AVAudioSessionErrorCodeCannotStartRecording异常,即可精准判定麦克风占用状态。

Flutter层调用原生方法的示例代码:

import 'package:flutter/services.dart';

const MethodChannel _micChannel = MethodChannel('your.app.channel/mic_check');

Future<bool> checkMicOccupiedNative() async {
  try {
    final bool result = await _micChannel.invokeMethod('checkMicOccupied');
    return result;
  } on PlatformException catch (_) {
    // 调用失败降级到方案一检测
    return checkMicrophoneIsOccupied();
  }
}

补充注意事项

  • 如果需要适配通话场景下的麦克风占用,可以配合通话状态检测插件,提前给用户弹出「当前处于通话状态,无法使用录音功能」的提示,避免用户操作无响应。
  • 部分国产定制Android系统对麦克风权限做了额外限制,建议优先使用方案一的试启动逻辑,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:03