iOS:在后台更新媒体信息

时间:2012-11-23 20:33:27

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

我正在使用MPNowPlayingInfoCenter为我的应用程序显示正在播放的歌曲,但我希望将HTTP Live Streaming合并到我的应用程序中,该应用程序将在后台发生任意数量的不同曲目。

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

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

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

1 个答案:

答案 0 :(得分: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 中的所需背景模式更改为应用播放音频