如何在设备上的前台app中显示双倍高度绿色状态栏(In-Call)?

时间:2016-08-03 08:21:05

标签: ios voip pjsip uistatusbar in-call

这里有很多问题要求在后台显示红色录音条。很明显我应该使用AVAudioSession类别AVAudioSessionCategoryPlayAndRecord。我的问题是,当我的应用程序中有活动的VOIP呼叫时,如何在前台应用程序中显示绿色的通话栏(或至少红色条)?所以我可以回到调用UI点击状态栏区域,就像Whatsapp或Skype那样。

我已经尝试过:

    信息列表voip中的{li> audioUIBackgroundModes模式+ setCategory:AVAudioSessionCategoryPlayAndRecord + setActive按建议in this SO answer(给我一个红色)去背景时的状态栏,但前景中没有任何内容)
  • 上一页+ AVAudioSession + setMode:AVAudioSessionModeVoiceChat - 无效
  • kCFStreamNetworkServiceTypeVoIP标志设置为pjsip源中的套接字并重新编译它 - 没有帮助。此外,自iOS 8以来已弃用。
  • 创建一个单独的套接字,为inputStream / outputStream设置voip标志:[self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType](从here获取示例代码)

使用pjsip进行通话。还有什么可以尝试增加状态栏高度,将所有UI移动? 有没有任何标准方法可以做到这一点,或者我应该通过调整根UIWindow并在状态栏下设置另一个绿色UIWindow来自行破解它?

修改: 由于没有找到标准方法的答案,接受@ roman-ermolov回答。对于那些会寻找答案的人,我可以建议你自己做几个选择:

  1. 将根视图控制器包装在容器内,就像在Apple's iAdSuite with Storyboards example中一样。例如,查看我的sample project。可能是制作那个酒吧的最好方法。
  2. Hack UINavigationBar height(请参阅this方法) - 尚未用于横向,但可能已解决
  3. 自己控制主UIWindow的框架,在状态栏下放置另一个UIWindow,并附上所需的内容。

2 个答案:

答案 0 :(得分:6)

我对两个应用程序(WhatsApp和Skype)进行了调查,并了解到他们使用自己的UIView来实现此功能。

这是Skype: Skype status bar

这是WhatsApp(Reveal无法获得真正的快照,但它传输的基本想法): enter image description here

在这两个应用程序中,它是一个UIView,它从屏幕顶部开始,有几种格式输出文本/处理触摸的方法。

在iOS 10中,Apple推出了CallKit.framework,但似乎它没有那种功能,所以唯一的方法就是这样做 - 自己做。

答案 1 :(得分:2)

Roman Ermolov的回答解释说,有些应用程序使用自己的UIView来实现此功能,但没有解释如何使用。我看到它的方式,你有几个选择。

如果您想将视图放在当前视图控制器的顶部(并覆盖),您可以使用UIView或您自己的UILabel创建UIWindow并将其添加为应用程序的子视图“keyWindow

要使视图保持在顶部而不覆盖视图控制器的内容,您可以采用与上面相同的方法,并在添加调用栏子视图时手动调整应用程序窗口或窗口的根视图控制器的大小。或者,您可以创建一个UIViewController基类,其中包含此调用栏子视图和视图高度约束的出口。此约束的默认值应为零。然后,在发出呼叫时,将高度约束更改为所需的回叫高度。这种约束方法也可以在应用程序的UIWindow上运行,但我不太熟悉在应用程序窗口上使用约束。