音频、AirPlay和画中画
,并在我的Info.plist文件中添加了以下内容。 <key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
但是在后台运行时音频仍将停止。
当我以配置文件模式运行应用程序时,出现此问题。而以调试模式运行时,则可以在后台继续播放音频。
我该怎么做才能让音频在后台继续运行?
音频、AirPlay和画中画
,并在我的Info.plist文件中添加了以下内容。 <key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
但是在后台运行时音频仍将停止。
当我以配置文件模式运行应用程序时,出现此问题。而以调试模式运行时,则可以在后台继续播放音频。
我该怎么做才能让音频在后台继续运行?
在 audio_service 0.18.0 的 README 中有一个相关说明,可以帮助解决这个问题:
请注意,音频后台模式仅允许应用程序在后台运行以播放音频。如果您的应用程序在没有播放音频的情况下空闲,例如使用计时器休眠几秒钟,则操作系统可能会终止您的进程。如果您的应用程序需要在音频曲目之间暂停几秒钟,请考虑播放无声音轨来创建该效果,而不是使用空闲计时器。
好的,除非您使用本机代码(Swift/Objective-C),否则您的代码将在Flutter引擎内运行-可能使用某些Dart Timer.periodic
。
当应用程序处于后台时,Flutter引擎可能会在任何时间点终止。 在Android上,即使只是切换到相机然后再切换回应用程序,也可能会发生这种情况。 在iOS上通常在一定时间后或在高系统负载时发生。
在这方面,Flutter(和大多数其他跨平台工具包)与本机应用程序非常不同。
您可以从这里开始阅读官方文档:https://flutter.dev/docs/development/packages-and-plugins/background-processes 这可能是一篇不错的文章:https://medium.com/vrt-digital-studio/flutter-workmanager-81e0cfbd6f6e
我对iOS了解不够,但我认为没有简单的方法可以安排您需要的小间隔执行。 在Android上可以使用类似AlarmManager的东西。
您可以尝试本地编写调度代码,并在设置周期后通过MethodChannel
从应用程序进行调度。
您可以查看以下库:
https://pub.dev/packages/workmanager(可能无法在您需要的小间隔时间内唤醒)
https://pub.dev/packages/android_alarm_manager_plus(仅适用于Android)
https://pub.dev/packages/audio_service(可能会给您一些关于如何在iOS上实现后台执行的想法)
编辑:
在阅读更多关于 iOS 启用后台音频 的信息后,我认为只有使用AVAudioSession时才能正常工作。你可能没有使用它。要使其正常工作,您需要一些本机代码。 audio_service
包使用此类会话。您可以尝试使用Dart代码进行调度,并通过audio_service
包播放声音。听起来似乎可以,但我没有使用过此包的经验。
audio_service
”软件包使用此会话,旧版本的“audio_service
”确实使用了“AVAudioSession”,但是从0.18.0开始,它只处理媒体回调,由您的应用程序负责与音频会话进行交互。如果在这些回调中使用任何音频播放器插件,那么几乎肯定该音频播放器插件将与音频会话进行交互。在“just_audio”的情况下,您可以选择禁用它,并通过“audio_session”软件包直接与音频会话进行交互。 - Ryan Heise请注意 @RyanHeise 的回答——他在使用 AudioSession 时是正确的:在后台中,应该播放声音或者静音。一旦音频暂停,应用就会被挂起。
另外,重要提示:当应用进入后台时,计划中的定时器会被暂停。这就是为什么你会觉得它停止工作了。不要在后台使用定时器进行调度——依赖系统的事件。