Я пытаюсь получить информацию о воспроизводимой в данный момент дорожке в приложении iOS. Это работает нормально, пока iPhone не подключен к аксессуар. Если я подключу его к своей машине (Opel Astra, разъем для iPhone), следующий код перестанет работать , как описано в документации :
Если вы создаете музыкальный проигрыватель iPod, и пользователь играет элемент из другой библиотеки, использующей общий доступ к дому, значение этого свойства равно
nil
.
Код:
// nil while connected to an accessory
MPMediaItem *nowPlayingMediaItem =
[[MPMusicPlayerController iPodMusicPlayer] nowPlayingItem];
// Works while not connected to an accessory
NSString *title = [nowPlayingMediaItem valueForProperty:MPMediaItemPropertyTitle];
Я даже пробовал «хакерские» вещи, такие как доступ к «частным» свойствам ( исходный code ):
MPMediaQuery *query=nil;
MPMediaItemCollection *collection=nil;
id internalPlayer=nil;
Ivar internalPlayeriVar = object_getInstanceVariable(iPod, "_internal", NULL);
internalPlayer = object_getIvar(iPod, internalPlayeriVar);
NSLog(@"internalPlayer: %@", internalPlayer);
Ivar queryIvar = object_getInstanceVariable(internalPlayer, "_query", NULL);
query = object_getIvar(internalPlayer, queryIvar); // nil everytime
Ivar collectionIvar = object_getInstanceVariable(internalPlayer,
"_itemCollection", NULL);
collection = object_getIvar(internalPlayer, collectionIvar); // nil everytime
или для вызова частных методов:
// Same behaviour like [iPod nowPlayingItem], works
// only while no accessory is connected
MPMediaItem *nowPlayingMediaItem =
[iPod nowPlayingItemAtIndex:[iPod indexOfNowPlayingItem]];
// Works while not connected to an accessory
NSString *title = [nowPlayingMediaItem valueForProperty:MPMediaItemPropertyTitle];
Это также нет решения для доступа к новому MPNowPlayingInfoCenter
, его nil
все время.
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo
Моя машина воспроизводит мою музыку напрямую, без использования приложения для iPhone и , похоже, мой iPhone знает, что сейчас играет машина, потому что на нем отображается название, исполнитель и обложка значок на экране блокировки (и только там). Также увеличивается внутренний счетчик игр.
Если я проверю состояние воспроизведения, оно также вернет ДА
, если в машине воспроизводится музыка:
[[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying
Итак, есть ли способ (может быть, путем вызова частных методов) для доступа к песне, автомобиль в данный момент воспроизводится?