这里有很多问题要求在后台显示红色录音条。很明显我应该使用AVAudioSession
类别AVAudioSessionCategoryPlayAndRecord
。我的问题是,当我的应用程序中有活动的VOIP呼叫时,如何在前台应用程序中显示绿色的通话栏(或至少红色条)?所以我可以回到调用UI点击状态栏区域,就像Whatsapp或Skype那样。
我已经尝试过:
voip
中的{li> audio
和UIBackgroundModes
模式+ setCategory:AVAudioSessionCategoryPlayAndRecord
+ setActive
按建议in this SO answer(给我一个红色)去背景时的状态栏,但前景中没有任何内容)
AVAudioSession
+ setMode:AVAudioSessionModeVoiceChat
- 无效kCFStreamNetworkServiceTypeVoIP
标志设置为pjsip源中的套接字并重新编译它 - 没有帮助。此外,自iOS 8以来已弃用。[self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]
(从here获取示例代码)使用pjsip进行通话。还有什么可以尝试增加状态栏高度,将所有UI移动? 有没有任何标准方法可以做到这一点,或者我应该通过调整根UIWindow并在状态栏下设置另一个绿色UIWindow来自行破解它?
修改: 由于没有找到标准方法的答案,接受@ roman-ermolov回答。对于那些会寻找答案的人,我可以建议你自己做几个选择:
答案 0 :(得分:6)
我对两个应用程序(WhatsApp和Skype)进行了调查,并了解到他们使用自己的UIView来实现此功能。
这是WhatsApp(Reveal无法获得真正的快照,但它传输的基本想法):
在这两个应用程序中,它是一个UIView,它从屏幕顶部开始,有几种格式输出文本/处理触摸的方法。
在iOS 10中,Apple推出了CallKit.framework,但似乎它没有那种功能,所以唯一的方法就是这样做 - 自己做。
答案 1 :(得分:2)
Roman Ermolov的回答解释说,有些应用程序使用自己的UIView
来实现此功能,但没有解释如何使用。我看到它的方式,你有几个选择。
如果您想将视图放在当前视图控制器的顶部(并覆盖),您可以使用UIView
或您自己的UILabel
创建UIWindow
并将其添加为应用程序的子视图“keyWindow
。
要使视图保持在顶部而不覆盖视图控制器的内容,您可以采用与上面相同的方法,并在添加调用栏子视图时手动调整应用程序窗口或窗口的根视图控制器的大小。或者,您可以创建一个UIViewController
基类,其中包含此调用栏子视图和视图高度约束的出口。此约束的默认值应为零。然后,在发出呼叫时,将高度约束更改为所需的回叫高度。这种约束方法也可以在应用程序的UIWindow
上运行,但我不太熟悉在应用程序窗口上使用约束。