Здесь много вопросов, касающихся отображения красной полосы записи в фоновом режиме. Совершенно ясно, что я должен использовать для этого AVAudioSession
категорию AVAudioSessionCategoryPlayAndRecord
. Мой вопрос: как я могу отобразить зеленую полосу входящих вызовов (или, по крайней мере, красную полосу) в приложении переднего плана, когда в моем приложении есть активный вызов VOIP? Так что я мог вернуться к вызову пользовательского интерфейса, коснувшись области строки состояния, точно так же, как Whatsapp или Skype.
Что я уже пробовал:
voip
иaudio
в ключеUIBackgroundModes
в Info.plist +setCategory:AVAudioSessionCategoryPlayAndRecord
+setActive
, как предлагается в этом SO-ответе (дает мне красный строка состояния при переходе в фоновый режим, но ничего на переднем плане)- Предыдущий +
AVAudioSession
+setMode:AVAudioSessionModeVoiceChat
- не сработало - Установить флаг
kCFStreamNetworkServiceTypeVoIP
для сокета в исходниках pjsip и перекомпилировать его - не помогло. Кроме того, не рекомендуется, начиная с iOS 8. - Создал отдельный сокет, установил флаг voip для inputStream / outputStream:
[self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]
(взял пример кода из здесь )
Использование pjsip для звонков. Что еще я могу попробовать увеличить высоту строки состояния, сдвинув весь пользовательский интерфейс вниз? Есть ли какие-нибудь стандартные способы сделать это, или я должен взломать его самостоятельно, изменив размер корневого UIWindow и установив другой зеленый UIWindow под панелью состояния?
Изменить. Поскольку стандартного способа сделать это не удалось, принят ответ @ roman-ermolov. Тем, кто будет искать ответ, могу предложить несколько вариантов, чтобы сделать это самостоятельно:
- Оберните корневой контроллер представления внутри контейнера, как в Пример iAdSuite от Apple с раскадровкой. Взгляните, например, на мой образец проекта. Наверное, лучший способ сделать этот бар.
- Взломать высоту UINavigationBar (см. этот подход) - не работа для пейзажа еще, но, возможно, будет решена
- Управляйте своим основным фреймом UIWindow самостоятельно, поместите еще один UIWindow под строку состояния с желаемым содержимым.