Я пытаюсь получить информацию о воспроизводимой в данный момент треке в приложении iOS. Это работает очень хорошо, в то время как iPhone не подключен к аксессуару. Если я подключу его к своей машине (Opel Astra, iPhone jack), следующий код перестанет работать как описано в документации:
Если вы создаете музыкальный проигрыватель 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];
Я даже попробовал "хакерские" вещи, чтобы получить доступ к свойствам "private" (исходный код):
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 знает, что в данный момент играет автомобиль, потому что на экране блокировки отображается значок названия, исполнителя и обложки (и только там). Также увеличивается количество внутренних игр.
Если я проверю состояние воспроизведения, он также возвращает YES
, если автомобиль воспроизводит музыку:
[[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying
Итак, есть ли способ (может быть, путем вызова частных методов) для доступа к песне, в данный момент автомобиль играет?