2016-08-03 31 views
7

Es gibt viele Fragen, die sich hier stellen, um im Hintergrund einen roten Aufnahmebalken anzuzeigen. Es ist völlig klar, dass ich AVAudioSession Kategorie AVAudioSessionCategoryPlayAndRecord dafür verwenden sollte. Meine Frage ist, wie kann ich eine grüne In-Call-Leiste (oder zumindest einen roten Balken) in einer Vordergrund-App anzeigen, wenn ich einen aktiven VOIP-Anruf in meiner App habe? So könnte ich zurückrufen, um die Benutzeroberfläche aufzurufen, die auf einen Statusleistenbereich klopft, genau wie Whatsapp oder Skype tut.Wie wird eine grüne Statusleiste mit doppelter Höhe (In-Call) in der App im Vordergrund auf dem Gerät angezeigt?

Was ich schon versucht habe:

  • voip und audio Modi in UIBackgroundModes Schlüssel in Info.plist + setCategory:AVAudioSessionCategoryPlayAndRecord + setActive als in this SO answer vorgeschlagen (gibt mir einen roten statusbar wenn Hintergrund gehen, aber nichts, während im Vordergrund
  • )
  • Zurück + AVAudioSession + setMode:AVAudioSessionModeVoiceChat - funktionierte nicht
  • Set kCFStreamNetworkServiceTypeVoIP Flagge in pjsip Quellen an Buchse und neu kompiliert es - nicht helfen. Auch als veraltet, da iOS 8.
  • eine separate Buchse Erstellt, stellen Sie die voip-Flag für input/output: [self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] (nahm den Beispielcode aus here)

Mit pjsip für Anrufe. Was kann ich sonst noch versuchen, um eine Höhe der Statusleiste zu erhöhen und die gesamte Benutzeroberfläche zu verkleinern? Gibt es irgendwelche Standardmethoden, um dies zu tun, oder sollte ich es mir selbst hacken, indem ich die Größe eines Root-UIWindows ändere und ein anderes grünes UIWindow unter der Statusleiste einstelle?


bearbeiten: Da keine Antwort für eine Standardmethode gefunden zu tun, akzeptiert @ römisch-Ermolov Antwort. Für diejenigen, die nach einer Antwort suchen kann ich mehrere Optionen vorschlagen, es selbst zu tun:

  1. Wickeln Sie Ihre Wurzel Viewcontroller innerhalb des Behälters, wie in Apple's iAdSuite with Storyboards example. Schauen Sie sich zum Beispiel meine sample project an. Wahrscheinlich der beste Weg, diese Bar zu machen.
  2. Hack UINavigationBar Höhe (siehe this Ansatz) - funktioniert nicht für die Landschaft noch, kann aber wahrscheinlich
  3. Kontrollieren Sie Ihre Haupt UIWindow des Rahmens selbst, legen Sie eine weitere UIWindow unter der Statusbar mit dem gewünschten Inhalt gelöst werden.
+0

War meine Antwort hilfreich oder sind Sie auf der Suche nach Implementierungsdetails? Wenn ja, könnten Sie bitte zusätzliche Informationen zu Ihren Anforderungen bereitstellen? –

+0

Es war sehr hilfreich, danke. Ich hoffe immer noch, dass es ein System gibt, um die In-Call-Leiste einzuschalten. Wenn niemand das findet, nehme ich deine Antwort an –

Antwort

5

Ich habe eine Untersuchung beider Apps (WhatsApp & Skype) gemacht und gelernt, dass sie ihre eigenen UIView für das Erreichen dieser Funktionalität verwendet.

Dies ist Skype: Skype status bar

Dies ist WhatsApp (Reveal nicht real Schnappschuss bekommen, aber es sendet Grundidee): enter image description here

In beiden Anwendungen es eine UIView, die an der Spitze beginnt, des Bildschirms und verschiedene Methoden zur Formatierung von Text/handle touch.

In iOS 10 eingeführt Apple CallKit.framework, aber es scheint, dass es nicht diese Art von Funktionalität zu, so dass der einzige Weg, es zu tun - tun Sie es selbst.

1

Roman Ermolovs Antwort erklärte, dass einige Anwendungen ihre eigenen UIView für diese Funktionalität verwenden, aber nicht wie erklärt. So wie ich es sehe, haben Sie ein paar Optionen.

Wenn Sie die Ansicht auf der Oberseite (und Abdeckung) die aktuelle Ansicht Controller legen wollen, können Sie eine UIView mit einem UILabel oder eigene UIWindow schaffen und dass keyWindow als Subview Ihrer Anwendungen hinzuzufügen.

Damit die Ansicht oben bleibt, ohne den Inhalt des Ansichtscontrollers zu verdecken, können Sie wie oben beschrieben vorgehen und die Größe des Anwendungsfenster oder des Fensteransichtssteuerungscontrollers manuell ändern, wenn Sie die Unteransicht der Aufrufleiste hinzufügen. Alternativ könnten Sie eine Basisklasse UIViewController erstellen, die diese Unteransicht der Aufrufleiste und einen Auslass für die Höhenbeschränkung der Ansicht enthält. Der Standardwert dieser Einschränkung sollte Null sein. Wenn dann ein Anruf getätigt wird, ändern Sie die Höhenbeschränkung auf die gewünschte Call-Back-Höhe. Dieser Constraint-Ansatz könnte auch für die Anwendung UIWindow funktionieren, aber ich bin nicht sehr vertraut mit Constraints im Fenster einer Anwendung.