2010-07-20 125 views
3

我正在研究一个iPhone iOS4应用程序,该应用程序包含从用户的iPod库播放音乐。我也想跟踪已播放的歌曲,并且能够随机更改歌曲,即使在背景中也是如此。所以我设置使用音乐播放器:iPhone应用程序使用MPMusicPlayer背景

[self setMusicPlayer: [MPMusicPlayerController iPodMusicPlayer]]; 

现在,我想这个应用程序继续运行,并在后台播放音乐,所以我已经设置:

Required background modes: App plays audio 

我有问题是当我的应用程序移动到后台时(当applicationDidEnterBackground被调用时,即在应用程序开关上),我的应用程序失去了控制权。由于我使用的是iPodMusicPlayer,因此音乐会继续播放,但我的应用程序无法控制,因此无法跟踪或更改歌曲。

现在,苹果文档指出,您的应用程序应该继续使用这个所需的背景模式标签在后台执行,但我的不是。是因为我在使用MPMusicPlayer吗?有什么办法可以解决它吗?有任何想法吗?

PS。我也试图让远程锁定和多任务iPod控制器与我的应用程序一起工作。我使用下面的代码,但remoteControlReceivedWithEvent永远不会被调用!它可以与MPMusicPlayer一起使用吗?我只用AVAudioPlayer看过它。

- (void)remoteControlReceivedWithEvent:(UIEvent *)event { 
    NSLog(@"remoteControlReceivedWithEvent"); 
    switch (event.subtype) { 
     case UIEventSubtypeRemoteControlTogglePlayPause: 
      NSLog(@"Play Pause"); 
      break; 
     case UIEventSubtypeRemoteControlNextTrack: 
      NSLog(@"Next"); 
      break; 
     default: 
      break; 
    } 
} 

- (BOOL)canBecomeFirstResponder { 
    NSLog(@"canBecomeFirstResponder"); 
    return YES; 
} 

- (void) viewWillAppear:(BOOL)animated{ 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
    [self becomeFirstResponder]; 
} 

回答

5

你是对的。在使用MPMusicPlayerController时,您的iPhone应用程序不会在后台运行。这也会阻止你接收远程控制事件。

如果您想从iPod库播放音频并让您的应用程序在后台继续运行,则必须使用低级AVPlayer类。