2013-11-19 2 views
1

Я работаю над игрой, сделанной в Unity, и я пытаюсь обработать случай, когда у игрока есть наушники с встроенным в них пультом дистанционного управления. Игрок нажимает кнопку воспроизведения на пульте дистанционного управления во время игры, и музыка из музыкального приложения начнется. В идеале мы бы захватили это событие и отключили нашу музыку, но я не могу найти уведомление, которое срабатывает в этой ситуации. Я попробовал следующее в AppController.mm:iOS Уведомление о музыке Начало игры

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 
{ 
    ... 

    // music notifications 
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

    [notificationCenter 
    addObserver: self 
    selector: @selector (handlePlaybackStateChanged:) 
    name:  MPMusicPlayerControllerNowPlayingItemDidChangeNotification 
    object:  [MPMusicPlayerController iPodMusicPlayer]]; 

    [[MPMusicPlayerController iPodMusicPlayer] beginGeneratingPlaybackNotifications]; 

    return NO; 
} 

- (void)handlePlaybackStateChanged:(NSNotification*)notification 
{ 
    NSLog(@"Playback State: %d", [MPMusicPlayerController iPodMusicPlayer].playbackState); 
    //if([[MPMusicPlayerController iPodMusicPlayer].playbackState 
} 

Кто-нибудь знает уведомление, что на самом деле срабатывает в этом случае или так, что я могу идентифицировать эту ситуацию? Заранее спасибо!

+0

Вы пытались инвертировать порядок команд? Вероятно, вам нужно сначала начать генерировать уведомления, и только после этого добавьте себя в качестве наблюдателя. Уведомления, которые публикуются, - MPMusicPlayerControllerPlaybackStateDidChangeNotification, MPMusicPlayerControllerNowPlayingItemDidChangeNotification и MPMusicPlayerControllerVolumeDidChangeNotification. – Cutetare

ответ

1

Изменения в AppControler.mm будут потеряны при обновлении Unity. Более безопасный способ - разместить весь собственный код в папке Активы/Плагины/iOS, s. Building Plugins for iOS для получения дополнительной информации.

Я сделал небольшой плагин под названием iPodHandlerPlugin on gitHub. Просто поместите файл lib в Активы/Плагины/iOS и IPodHandler somwhere под Сценарии.

Чтобы получать уведомления об изменениях состояния, следуйте инструкциям, приведенным в readme.

Возможно, статическая библиотека несколько передозирована. В качестве альтернативы вы можете использовать файлы iPodHandlerPlugin.mm и UnityIPodCallbackListener.m непосредственно в Активы/Плагины/iOS.

+0

Спасибо, Кей, я сделаю это. Я пришел к этому проекту, и файл AppController.mm был уже сильно изменен, но он находится в папке «Плагины», чтобы мы могли сохранить изменения, которые были внесены в него. Я не ожидаю обновления с Unity 4.1, хотя, поскольку я прочитал, есть тонна изменений в этом файле, которые нам придется объединить. – alk3ovation

+0

Кей, я просто взглянул на код, и я делаю то же самое, что и регистрация для уведомлений и установка селектора для обработки этих уведомлений. Однако моя функция уведомления не вызывается. Любые мысли о том, почему? – alk3ovation

+0

Вы правы, ваш код кажется прекрасным до сих пор. Чтобы сузить проблему, я бы извлек код в отдельный класс (и файл в _Plugins/iOS_) и вызвал его из некоторого метода «Awake»? – Kay

Смежные вопросы