Я пытаюсь получить информацию о текущем воспроизводимом треке в приложении для iOS. Это работает довольно хорошо, в то время как iPhone не подключен к аксессуару. Если я подключу его к своей машине (Opel Astra, разъем для iPhone), следующий код перестанет работать , как описано в документации :
Если вы создаете музыкальный проигрыватель iPod, а пользователь воспроизводит элемент из другой библиотеки с помощью функции «Домашний обмен», значение этого свойства равно nil
.
* * 1010
Код:
// nil while connected to an accessory
MPMediaItem *nowPlayingMediaItem =
[[MPMusicPlayerController iPodMusicPlayer] nowPlayingItem];
// Works while not connected to an accessory
NSString *title = [nowPlayingMediaItem valueForProperty:MPMediaItemPropertyTitle];
Я даже пробовал такие "хакерские" вещи, как доступ к "частным" свойствам ( оригинальный код ):
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
Итак, есть ли какой-нибудь способ (может быть, через вызов приватных методов) для доступа к песне, машина в данный момент играет?