【问题标题】:Flutter: How to configure audio_session to duck othersFlutter:如何配置 audio_session 以避开其他人
【发布时间】:2021-08-26 19:16:29
【问题描述】:

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

【问题讨论】:

  • 我认为这可能是 2 个单独的问题。 1)如何播放背景音频,2)如何躲避其他应用程序的音频。您是否尝试过搜索这些个别问题的现有答案?
  • 嗨@RyanHeise!感谢您的评论。我已经能够播放背景音频了,有多种方法。我正在使用 just_audio: latest & just_audio_background: ^0.0.1-beta.0+1。我问这个问题是因为我在音频会话上尝试了多种配置,但都没有奏效。他们都打断了正在播放的音频。如果您有任何现成的答案,我将不胜感激。
  • @RyanHeise 刚刚意识到你是编写这些包的人。谢谢你太棒了!
  • 不用担心 - 闪避完全独立于背景音频,因此您无需提及背景音频,您可以缩小问题范围,只谈论闪避,这样别人会更容易答案(尽管请注意,如果您在 Android 或 iOS 上搜索闪避,已经有许多相关答案,并且 audio_session 基本上直接公开了原始 Android 和 iOS API,因此 StackOverflow 上任何特定于 Android 和 iOS 的答案也将适用于 audio_session。)

标签: android ios flutter audiosession just-audio


【解决方案1】:

步骤:

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

依赖关系:

  • audio_service: ^0.18.0;
  • audio_session:^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())); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2018-10-21
    • 2011-07-25
    • 2019-01-07
    • 2020-06-23
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多