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

Thr*_*dyn 9 iphone ipod objective-c media-player

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

像这样......

 ____________
|            |
| |<  ||  >| |    skip back, play/pause, skip forward
|            |
|  XXXXXXXX  |    album art
|  XXXXXXXX  |
|  XXXXXXXX  |
|  XXXXXXXX  |
|            |
|____________|
Run Code Online (Sandbox Code Playgroud)

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


- 图稿加载错误转移到一个新问题.

- 文本到语音的实现转移到了一个新问题.

- 歌曲开始后,进度条的填充率为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];
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*ath 4

MediaPlayer框架正是您所寻找的。有一个有用的指南,其中还包含 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
Run Code Online (Sandbox Code Playgroud)

请花时间阅读文档并注意有关家庭共享的注意事项。您还需要注册有关可能在您控制之外发生的玩家状态更改的通知。