如何保存当前MPMediaItem的状态并在进入前景时对更改后的值作出响应

如何保存当前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 
    } 
+0

如何在暂停时保存媒体项目?为什么我不能保存媒体项目的持久ID呢?但是,这很有意义。谢谢。 –

+0

当然,请保存持久ID。只需将NSNumber * previousItem添加到头文件而不是MPMediaItem * mediaItemSavedWhenAppSuspended。 – amergin

+0

不错的尝试,但'如果([currentSavedPersistantID比较:self.savedPersistantID] == NSOrderedSame){ }'抛出一个异常。你确定这个ID是一个数字?我认为这是一个'NSString',但这也行不通。 –