Управление iPod из другого приложения? - PullRequest
9 голосов
/ 13 июня 2011

Я посмотрел на пример кода AddMusic от Apple, но это не совсем то, что я хочу. Я пытаюсь найти способ запустить / остановить воспроизведение музыки в приложении iPod, не контролируя содержимое песочницы моего приложения.

Как то так ...

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

Конечно, приложение более сложное, чем это, но сейчас я хочу сосредоточиться на , предполагая прямое управление .
Бонус начисляется любому, кто получает ссылку без обмана .


- Ошибка загрузки обложки перенесена в новый вопрос .

- Реализация преобразования текста в речь перенесена на новый вопрос .

- индикатор выполнения заполняется до 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 Ответ

4 голосов
/ 13 июня 2011

MediaPlayer Framework - это то, что вы ищете. Существует полезное руководство , которое также содержит ссылку на обзор 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

Не торопитесь, чтобы прочитать документы и принять к сведению предостережения, упомянутые в отношении Home Sharing. Вы также можете зарегистрироваться для получения уведомлений об изменениях состояния игрока, которые могут происходить вне вашего контроля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...