2016-08-03 11 views
7

Jest tu wiele pytań z prośbą o wyświetlenie czerwonego paska nagrywania w tle. Jest całkowicie jasne, że powinienem użyć do tego kategorii AVAudioSession kategorii AVAudioSessionCategoryPlayAndRecord. Moje pytanie brzmi: jak mogę wyświetlać zielony pasek In-Call (lub przynajmniej czerwony pasek) w aplikacji na pierwszym planie, gdy ma aktywne połączenie VOIP w mojej aplikacji? Mogłem więc powrócić, aby zadzwonić do UI, dotykając paska stanu, tak jak Whatsapp lub Skype.Jak wyświetlić zielony pasek stanu podwójnej wysokości (In-Call) w aplikacji na pierwszym planie na urządzeniu?

Co ja już próbowałem:

  • voip i audio tryby w UIBackgroundModes kluczu Info.plist + setCategory:AVAudioSessionCategoryPlayAndRecord + setActive jak sugeruje in this SO answer (daje mi czerwony pasek stanu, gdy dzieje w tle, ale nic, podczas gdy w planie)
  • Poprzedni + AVAudioSession + setMode:AVAudioSessionModeVoiceChat - nie działa
  • Ustaw kCFStreamNetworkServiceTypeVoIP flagę gniazdko w źródłach PJSIP i rekompilacji to - nie pomogło. Również przestarzałe od iOS 8.
  • utworzono osobną gniazdo ustaw flagę VoIP InputStream/OutputStream: [self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] (wziął przykładowy kod z here)

Korzystanie PJSIP dla połączeń. Co jeszcze mogę spróbować zwiększyć wysokość paska statusu, przestawiając cały interfejs? Czy są jakieś standardowe sposoby, aby to zrobić, czy też powinienem włamać się do niego przez zmianę rozmiaru głównego UIWindow i ustawienie innego zielonego UIWindow pod paskiem stanu?


Edit: Ponieważ żadna odpowiedź znajduje się w standardowy sposób to zrobić, akceptowane @ roman-Ermolov odpowiedź. Dla tych, którzy będą szukać odpowiedzi mogę zasugerować kilka opcji, aby to zrobić samemu:

  1. Owiń viewcontroller korzeni wewnątrz pojemnika, jak w Apple's iAdSuite with Storyboards example. Spójrz na przykład na moją sample project. Prawdopodobnie najlepszy sposób na zrobienie tego paska.
  2. wysokość Hack UINavigationBar (patrz this podejście) - nie działa jeszcze na krajobraz, ale prawdopodobnie może być rozwiązany
  3. Kontroluj ramkę głównego UIWindow za siebie, umieścić kolejną UIWindow pod pasku stanu o żądanej treści.
+0

Czy moja odpowiedź była pomocna, czy może szukasz szczegółów dotyczących implementacji? Jeśli tak, czy mógłbyś podać dodatkowe informacje na temat swoich wymagań? –

+0

To było bardzo pomocne, dziękuję. Wciąż mam nadzieję, że istnieje systemowy sposób włączania się w razie potrzeby. Jeśli nikt tego nie znajdzie, przyjmuję twoją odpowiedź –

Odpowiedz

5

Przeprowadziłem dochodzenie w sprawie obu aplikacji (WhatsApp & Skype) i dowiedziałem się, że użyli własnego interfejsu UIView do uzyskania tej funkcji.

Jest Skype: Skype status bar

To WhatsApp (Reveal nie można dostać prawdziwego migawkę, ale przekazuje podstawowe pojęcia): enter image description here

W obu aplikacjach jest UIView, który rozpoczyna się na szczycie ekranu i kilka metod formatowania wyjściowego tekstu/obsługi dotykiem.

W iOS 10 Apple wprowadzono CallKit.framework, ale wydaje się, że nie ma tego rodzaju funkcjonalności również, więc jedyny sposób to zrobić - zrób to sam.

1

Odpowiedź Roman Ermolov wyjaśniła, że ​​niektóre aplikacje wykorzystują własną funkcję UIView, ale nie wyjaśniają, w jaki sposób. Tak jak to widzę, masz kilka opcji.

Jeśli chcesz położyć widok na góry (i pokrycia) aktualny kontroler widoku, można utworzyć UIView z UILabel lub własne UIWindow i dodać, że jako podrzędny w aplikacjach keyWindow.

Aby umieścić widok na wierzchu bez zasłaniania zawartości kontrolera widoku, można zastosować takie samo podejście jak powyżej i ręcznie zmienić okno podglądu głównego okna aplikacji lub okna, gdy dodasz widok podz góry paska połączeń. Alternatywnie można utworzyć klasę podstawową UIViewController, która zawiera ten widok podz góry paska wywołań i ujście ograniczenia wysokości widoku. Domyślna wartość tego ograniczenia powinna wynosić zero. Następnie, po nawiązaniu połączenia, zmień ograniczenie wysokości na żądaną wysokość połączenia. To ograniczenie może również działać na aplikacji UIWindow, ale nie jestem zaznajomiony z ograniczeniami w oknie aplikacji.

Powiązane problemy