【问题标题】:iOS: Updating Media Information in the BackgroundiOS:在后台更新媒体信息
【发布时间】:2012-11-23 20:33:27
【问题描述】:

我目前正在为我的应用程序使用 MPNowPlayingInfoCenter 来显示正在播放的歌曲,但我希望将 HTTP Live Streaming 合并到我的应用程序中,这将在后台出现任意数量的不同轨道。

有没有办法在应用程序处于后台时设置 nowPlayingInfo(在一定时间后调用函数?),即使应用程序在技术上实际上并不在后台运行?

或者有没有办法在我的服务器上使用一个简单的调用来设置正在播放的信息,这将返回正确的信息 - 使用返回字符串或图像的 API 调用?

我知道这是可能的,因为 Songza 已经这样做了,但也许他们已经获得了使用 Apple 的某些私有方法的许可(如果你能做到的话)。

【问题讨论】:

  • 如果您使用AVPlayer 类并且您的应用程序的主要目的是播放音乐,那么您将能够在后台运行它,从而在何时更新nowPlayingInfo轨道变了。您需要将“应用程序播放音频”添加到“后台模式”,并创建相应的音频会话。
  • @sooper 那么,如果我设置了一个要在 5 分钟后调用的方法,即使应用程序在后台,它仍然会运行?我发现进程停止并且在应用程序返回前台之前不会调用。当我为音频设置“背景模式”时,会有什么不同吗?我想调用一个完全独立于AVPlayer 的函数。
  • 只要AVPlayer 正在播放音乐,您就可以运行其他的东西(计时器、更新现在播放信息等)。
  • @sooper 好吧,很抱歉没有事先尝试过。我认为这只是一个假设,如果应用程序在后台,进程就不会运行。我会试一试的!
  • 现在,如果您在后台播放音乐以使其保持活力,Apple 将拒绝您。

标签: objective-c ios background-process avplayer mpnowplayinginfocenter


【解决方案1】:

如果您使用AVPlayer 类并且您的应用的主要目的是播放音乐,那么您将能够在后台运行它,从而在更改曲目时更新nowPlayingInfo

只是一个简单的例子:

- (void)viewDidLoad {
    [super viewDidLoad]

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive: YES error: nil];

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        [self becomeFirstResponder];
        //These two steps are important if you want the user to be able to change tracks with remote controls (you'll have to handle the remote control events yourself).
    }
    self.yourPlayer = [[AVPlayer alloc] init];
}

在您的dealloc 方法中取消注册远程控制事件:

[[UIApplication sharedApplication] endReceivingRemoteControlEvents]

info.plist 中的必需的背景模式更改为应用播放音频

【讨论】:

  • 哦!我绝对没有在我的交易中调用endReceivingRemoteControlEvents。我认为它是在dealloc上隐式调用的。很高兴知道。 setActive:error: 在做什么?除了 dealloc 调用之外,它是我唯一缺少的部分。
  • 我刚刚重新阅读了文档,发现如果存在冲突,它会覆盖其他应用程序的音频。谢谢!在我验证它是否有效之前,我将暂时不选中它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多