Jak korzystać z kAudioSessionProperty_OverrideCategoryMix Z innymi
Chciałbym, aby moja aplikacja wirtualnego instrumentu mogła być używana (za pomocą klawiatury MIDI), gdy aplikacja jest w tle. Działa to dobrze, ustawiając UIBackgroundModes na „audio” i ustawiając kategorię AudioSessions na AVAudioSessionCategoryPlayback. Ponadto, aby umożliwić miksowanie z aplikacją Odtwarzacz muzyki, ustawiłem właściwość kAudioSessionProperty_OverrideCategoryMix Z innymi.
Aby zaoszczędzić energię akumulatora, zaleca się, aby użytkownik wyłączył działanie w tle, jeśli nie jest ono potrzebne. W mojej aplikacji znajduje się przełącznik do przełączania między kategorią AVAudioSessionCategoryAmbient a kategorią AVAudioSessionCategoryPlayback (za pomocą kAudioSessionProperty_OverrideCategoryMixWith Inne). Kod jest taki (pominięto obsługę błędów):
<code>NSString *category = supportsBackgroundOperation ? AVAudioSessionCategoryPlayback : AVAudioSessionCategoryAmbient; [session setCategory:category error:nil]; if (category == AVAudioSessionCategoryPlayback) { UInt32 allowMixing = true; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); } </code>
Teraz problem: załóżmy, że aplikacja muzyczna gra w tle. Użytkownik gra na wirtualnym instrumencie na pierwszym planie (za pomocą klawiatury MIDI), aby towarzyszyć odtwarzaczowi muzyki i decyduje się uruchomić kolejną aplikację, powiedz pokaz slajdów, aby cieszyć się, dlaczego gra na instrumencie. Przechodzi więc do widoku ustawień mojej aplikacji i aktywuje działanie w tle. Następnie wykonywany jest powyższy kod. Boom, aplikacja Muzyka zamilknie. Jak rozumiem, właściwość kAudioSessionProperty_OverrideCategoryMixWithOthers może być ustawiona tylkopo ustawiając kategorię, ale gdy ustawię kategorię na AVAudioSessionCategoryPlayback, odtwarzacz muzyczny zostanie wyciszony przez system, zanim będę miał szansę ustawić kAudioSessionProperty_OverrideCategoryMix Z innymi.
Czy tak się stało? Czy można coś zrobić? Próbowałem dezaktywować / aktywować sesję przed / po zmianie kategorii, ale to prowadzi do innych problemów.
Markus