[英]How to keep receiving the data when app is sent to background mode?
在iOS12中,苹果开始取消网络请求(如果不是URLSessionDownloadTask
并使用后台会话进行设置。
但是根据苹果网站:
您不必使用后台会话进行所有后台网络活动...声明适当后台模式的应用程序可以使用默认的URL会话和数据任务,就像它们位于前台一样
我正在使用自定义播放器流媒体文件,应用程序启用了Audio
和Background Fetch
模式。 一旦应用进入后台状态任务, URLSessionDataTask
就会在前台初始化。
我知道AVPlayer可以在后台流式传输,但不能使用AVPlayer。
我知道我可以使用URLSessionDownloadTask
设置会话,该会话将在单独的进程中下载数据并返回到文件的路径,由于流媒体需求,这不是一个选择。
我知道我可以使用UIApplication.shared.beginBackgroundTask
请求额外的后台执行时间,但这是不可接受的解决方案,因为如果backgroundTimeRemaining
在流完成的应用程序终止之前到期。
当应用程序处于后台模式时,有什么方法可以继续接收数据吗?
确保您的后台会话已启用shouldUseExtendedBackgroundIdleMode
。 如果不这样做,则当应用程序从前台执行过渡到后台执行时,会话将停止数据任务。 或者,正如“后台文件”中的“下载文件”所述 ,您也可以使用default
会话配置,而不会表现出这种行为。
FWIW,在使用AVPlayer
,除了启用背景音频功能外...
...您可能还必须告诉共享音频会话实例它是活动的:
try AVAudioSession.sharedInstance().setCategory(.playback)
try AVAudioSession.sharedInstance().setActive(true)
我无法说出您的“自定义播放器”需要什么,但是对我来说,我必须同时执行这两项操作,以使应用程序在后台运行,并使用AVPlayer
播放音频。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.