从另一个应用程序控制iPod?

时间:2011-06-13 14:35:50

标签: iphone objective-c media-player ipod

我看了一下Apple的AddMusic示例代码,但这不是我想要的。我正试图找到一种方法来启动/停止在iPod应用程序中播放音乐,而不是控制应用程序沙箱中包含的内容。

像这样......

 ____________
|            |
| |<  ||  >| |    skip back, play/pause, skip forward
|            |
|  XXXXXXXX  |    album art
|  XXXXXXXX  |
|  XXXXXXXX  |
|  XXXXXXXX  |
|            |
|____________|

当然应用程序比这更复杂,但是现在,我想专注于假设直接控制
奖励指向任何未经cheating获取参考的人。


- 艺术品加载错误已移至a new question

- 文字转语音实施已移至a new question

- 歌曲开始后,进度条的填充率为100%。此代码有效:

// your must register for notifications to use them
- (void)handleNowPlayingItemChanged:(id)notification {
    …
    // this is what I forgot to do
    NSNumber *duration = [item valueForProperty:MPMediaItemPropertyPlaybackDuration];
    float totalTime = [duration floatValue];
    progressSlider.maximumValue = totalTime;
…
}

// called on a one-second repeating timer
- (void)updateSlider {
    progressSlider.value = musicPlayer.currentPlaybackTime;
    [progressSlider setValue:musicPlayer.currentPlaybackTime animated:YES];
}

1 个答案:

答案 0 :(得分:4)

MediaPlayer framework正是您要找的。有一个useful guide,其中还包含指向MediaPlayer API概述的链接。

具体来说,您正在寻找MPMusicPlayerController。您的应用可以控制专用的应用媒体播放器或iPod媒体播放器,这似乎是您想要的。

一个简单的例子就是(标题省略):

@implementation MyPlaybackController

- (id)initWithNibName:(NSString *)nibName bundle:(id)bundleOrNil 
{
  if ((self = [super initWithNibName:nibName bundle:bundleOrNil])) {
    self.musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
  }  
  return self;
}

- (IBAction)skipForward:(id)sender
{
  [self.musicPlayer skipToNextItem];
}

- (IBAction)skipBack:(id)sender
{
  [self.musicPlayer skipToPreviousItem];
}

- (IBAction)togglePlayback:(id)sender
{
  if (self.musicPlayer.playbackState == MPMusicPlaybackStatePlaying) {
    [self.musicPlayer pause];
  } else {
    [self.musicPlayer play];
  }
}

@end

请花些时间阅读文档,并注意有关家庭共享的提醒。您还需要在控制之外的玩家状态更改中注册通知。

相关问题