如何保存当前MPMediaItem的状态并在进入前景时对更改后的值作出响应
问题描述:
因此,我正在尝试开发一款使用iPod音乐库的音乐游戏。用户根据提示选择歌曲。因为我使用的是[MPMusicPlayerController iPodMusicPlayer]
,所以用户可能在回到应用程序之前更改了iPod应用程序中的歌曲。如果是这样的话,我希望它打电话给[musicPlayer stop]
。不幸的是,我不知道如何保存当前播放的歌曲,并在应用程序从背景中返回时针对当前播放的歌曲进行检查。检查下面的代码。如何保存当前MPMediaItem的状态并在进入前景时对更改后的值作出响应
- (void)applicationDidEnterBackground:(UIApplication *)application
{
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *persistantID = [musicPlayer.nowPlayingItem valueForProperty:MPMediaItemPropertyPersistentID];
[prefs setValue:persistantID forKey:@"NOWPLAYING_ID"];
}
而且
- (void)applicationWillEnterForeground:(UIApplication *)application
{
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *persistantID = [prefs stringForKey:@"NOWPLAYING_ID"];
if (persistantID == [musicPlayer.nowPlayingItem valueForProperty:MPMediaItemPropertyPersistentID]) {
}
else {
[musicPlayer stop];
}
[prefs setValue:nil forKey:@"NOWPLAYING_ID"];
}
谁能给我个忙吗?非常感谢。
答
- (void)applicationWillResignActive:(UIApplication *)application {
self.mediaItemSavedWhenAppSuspended = [musicPlayer nowPlayingItem];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
MPMediaItem *nowPlayingItem = [musicPlayer nowPlayingItem];
NSNumber *playingItem = [nowPlayingItem valueForProperty:MPMediaItemPropertyPersistentID];
NSNumber *previousItem = [self.mediaItemSavedWhenAppSuspended valueForProperty:MPMediaItemPropertyPersistentID];
if([playingItem compare:previousItem] == NSOrderedSame) { // same track still playing
}
如何在暂停时保存媒体项目?为什么我不能保存媒体项目的持久ID呢?但是,这很有意义。谢谢。 –
当然,请保存持久ID。只需将NSNumber * previousItem添加到头文件而不是MPMediaItem * mediaItemSavedWhenAppSuspended。 – amergin
不错的尝试,但'如果([currentSavedPersistantID比较:self.savedPersistantID] == NSOrderedSame){ }'抛出一个异常。你确定这个ID是一个数字?我认为这是一个'NSString',但这也行不通。 –