如何在设备上的前台应用程序中显示双高度绿色状态栏(In-Call)?
这里有很多问题要求在后台显示红色的录制栏。 这完全清楚,我应该使用AVAudioSession
类别AVAudioSessionCategoryPlayAndRecord
。 我的问题是,当我的应用程序中有一个活动的VOIP电话时,如何在前台应用程序中显示绿色的In-Call栏(或至less红色栏)? 所以我可以返callback用UI 攻击状态栏区域,就像Whatsapp或Skype一样。
我已经尝试过了:
-
UIBackgroundModes
和audio
模式在Info.plist +setCategory:AVAudioSessionCategoryPlayAndRecord
+setActive
在UIBackgroundModes
键在这个答案build议(给我一个红色的状态栏时,去背景,但没有在前台) - 以前的+
AVAudioSession
+setMode:AVAudioSessionModeVoiceChat
– 没有工作 - 将
kCFStreamNetworkServiceTypeVoIP
标志设置为pjsip源代码中的套接字并重新编译 – 没有帮助。 此外,自iOS8以来已弃用。 - 创build一个单独的套接字,为inputStream / outputStream设置voip标记:
[self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]
(从此处取样示例代码)
使用pjsip进行调用。 还有什么我可以尝试增加状态栏高度,移动所有的用户界面? 有没有什么标准的方法来做到这一点,或者我应该通过调整根UIWindow并在状态栏下设置另一个绿色的UIWindow来破解我自己的?
编辑 :由于没有find答案的标准方式来做到这一点,接受@罗曼 – 埃尔莫洛夫答案。 对于那些将寻找答案的人,我可能会build议你自己做几个select:
- 将容器中的根视图控制器包裹起来 ,就像苹果的iAdSuite中的Storyboards示例一样 。 看看我的示例项目 。 可能是最好的方式来制作吧。
- Hack UINavigationBar的高度(参见这个方法) – 不适用于风景,但可能可以解决
- 自己控制你的主UIWindow的框架,在状态栏下面放置另一个UIWindow,并带有所需的内容。
我已经做了两个应用程序(WhatsApp和Skype)的调查,并了解到他们使用自己的UIView来实现这一function。
这是Skype:
这是WhatsApp(揭示不能得到真正的快照,但它传递的基本思路):
在这两个应用程序中,它是一个UIView开始在屏幕上方和几种格式输出文本/处理触摸它的方法。
在iOS 10中,苹果引入了CallKit.framework ,但它似乎并没有那种function,所以唯一的办法就是自己动手。
罗马Ermolov的答案解释说,一些应用程序使用自己的UIView
这个function,但没有解释如何。 我看到它的方式,你有几个select。
如果你想在当前的视图控制器上放置视图,你可以使用UILabel
或者你自己的UIWindow
来创build一个UIView
,并把它作为应用程序的keyWindow
子视图。
要将视图粘贴到顶部而不覆盖视图控制器的内容,可以采取与上述相同的方法,并在添加调用栏子视图时手动调整应用程序窗口或窗口的根视图控制器的大小。 或者,您可以创build一个UIViewController
基类,其中包含此调用栏子视图和视图高度约束的出口。 这个约束的默认值应该是零。 然后,在发出呼叫时,将高度限制更改为所需的回叫高度。 这个约束方法也可以在应用程序的UIWindow
上工作,但我不太熟悉在应用程序的窗口上使用约束。