21 июля 2010 г.

Работа с музыкальной библиотекой iPod в iOS

Возникла у меня задача, проверить программно, присутствует ли конкретная песня в библиотеке пользователя на iPhone/iPod Touch, и если есть, то проиграть ее. Итак, будем программировать работу с библиотекой iPod.

Для взаимодействия с музыкальной библиотекой в iOS существует класс MPMusicPlayerController из фраемворка MediaPlayer. Функций вроде и не много, но они покрывают практически все возможности приложения iPod.app. При создании экземпляра класса можно выбрать, каким плейером будем пользоваться, созданным отдельно для приложения(метод applicationMusicPlayer), или глобальным плейером iPod(метод iPodMusicPlayer). Первый выгрузится при закрытии приложения, второй может продолжать работать после закрытия приложения. Будем работать с глобальным плейером iPod.

Вызвав метод play мы уже можем услышать музыку доносящуюся из динамиков устройства (iPhone Sumulator не подключается к библиотеке iTunes). Если нужно знать, когда закончилась/сменилась песня нужно зарегистрировать слушателя:

  1. MPMusicPlayerController *ipod = [MPMusicPlayerController iPodMusicPlayer];
  2. [[NSNotificationCenter defaultCenter] addObserver:self
  3.   selector:@selector(playbackItemChanged:)
  4.   name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
  5.   object:ipod];
  6. [ipod beginGeneratingPlaybackNotifications];

тут мы регистрируем функцию playbackItemChanged: текущего класса как слушателя события изменения песни в iPod.

Хорошо, сейчас мы можем прослушивать песни из пленэра, но не можем выбирать, что слушать. Звуковой файл представляется в библиотеке классом MPMediaItem. Но просто так его создать нельзя, его нужно получать фильтруя из музыкальной библиотеки данные. Для фильтрации используется класс MPMediaQuery. Тут можно отфильтровать библиотеку по разным множеству категориям (таким как жанр, аудиокниги, подкасты, плечисты), а также можно добавлять свои фильтры.

  1. [ipod setQueueWithQuery:[MPMediaQuery songsQuery]];
  2. [ipod play];

И по традиции пример приложения.

Комментариев нет:

Отправить комментарий