首页 > 解决方案 > Flutter:如何配置 audio_session 以避开其他人

问题描述

我需要在不中断现有播放列表的情况下播放音频。我的目标是通过电话上当前的音频服务播放音频,理想情况下我想避开音频并在其上播放我的流。与 GPS 服务在驾驶时所做的非常相似(Waze、谷歌地图)。

标签: androidiosflutteraudiosessionjust-audio

解决方案


脚步:

  1. 安装依赖项
  2. 创建 initAudioService() 函数
  3. 创建一个 AudioSession 实例
  4. 如示例中所示配置您的 AudioSession 实例
  5. 如示例所示初始化您的 AudioService
  6. 在 runApp 之前从 main 调用 initAudioService()

依赖项:

  • 音频服务:^0.18.0;
  • 音频会话:^0.1.6+1

例子:

    导入“包:audio_service/audio_service.dart”;
    导入“包:audio_session/audio_session.dart”;
    导入“audio_player_service.dart”;
    
    未来的 initAudioService() 异步 {
      //audio_session 实例
      最终会话 = 等待 AudioSession.instance;
      //audio_session DUCK 其他配置
      等待 session.configure(const AudioSessionConfiguration(
        avAudioSessionCategory: AVAudioSessionCategory.playback,
        avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.duckOthers,
        avAudioSessionMode: AVAudioSessionMode.defaultMode,
        avAudioSessionRouteSharingPolicy:
            AVAudioSessionRouteSharingPolicy.defaultPolicy,
        avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.none,
        androidAudioAttributes:AndroidAudioAttributes(
          contentType:AndroidAudioContentType.music,
          标志:AndroidAudioFlags.none,
          用法:AndroidAudioUsage.media,
        ),
        androidAudioFocusGainType:AndroidAudioFocusGainType.gainTransientMayDuck,
        androidWillPauseWhenDucked:真,
      ));
    //初始化音频服务
      返回等待 AudioService.init(
        生成器:()=> AudioPlayerService(),
        配置:常量音频服务配置(
          androidNotificationChannelId: 'com.YOUR_COMPANY.YOUR_APP_NAME.audio',
          androidNotificationChannelName: '音频服务演示',
          androidNotificationOngoing:是的,
          androidStopForegroundOnPause:真,
        ),
      );
    }
    
    //主要的
    无效主()异步{
      等待 initAudioService();
      runApp(const MaterialApp(home: MyApp()));
    }


推荐阅读