【发布时间】:2016-08-03 08:21:04
【问题描述】:
这里有很多问题要求在后台显示红色录音栏。很明显,我应该为此使用AVAudioSession 类别AVAudioSessionCategoryPlayAndRecord。我的问题是,当我的应用程序中有活动的 VOIP 通话时,如何在前台应用程序中显示绿色的通话中栏(或至少是红色栏)?所以我可以点击状态栏区域返回调用 UI,就像 Whatsapp 或 Skype 一样。
我已经尝试过的:
-
voip和audio模式在UIBackgroundModes中键入 Info.plist +setCategory:AVAudioSessionCategoryPlayAndRecord+setActive建议 in this SO answer (在进入后台时给我一个红色状态栏,但在前台时没有) - 以前的 +
AVAudioSession+setMode:AVAudioSessionModeVoiceChat- 没用 - 在 pjsip 源代码中将
kCFStreamNetworkServiceTypeVoIP标志设置为套接字并重新编译它 - 没有帮助。此外,自 iOS 8 起已弃用。 - 创建了一个单独的套接字,为 inputStream/outputStream 设置了 voip 标志:
[self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType](从here获取示例代码)
使用 pjsip 进行调用。我还能尝试什么来增加状态栏高度,将所有 UI 向下移动? 是否有任何标准方法可以做到这一点,或者我应该通过调整根 UIWindow 的大小并在状态栏下设置另一个绿色 UIWindow 来破解它?
编辑: 由于没有找到标准方法的答案,因此接受了@roman-ermolov 答案。对于那些要寻找答案的人,我可能会建议几个自己做的选择:
- 将根视图控制器包装在容器中,例如 Apple's iAdSuite with Storyboards example。以我的sample project 为例。可能是制作那个酒吧的最佳方式。
- Hack UINavigationBar 高度(参见this 方法)- 不适用于横向,但可能会解决
- 自己控制主 UIWindow 的框架,在状态栏下方放置另一个 UIWindow 并包含所需的内容。
【问题讨论】:
-
我的回答是否有帮助,或者您可能正在寻找实施细节?如果是这样,您能否提供有关您的要求的更多信息?
-
非常有帮助,谢谢。我仍然希望有一种系统方法可以打开通话栏,如果有的话。如果没有人发现这个,我会接受你的回答
-
请您在我的 Android 应用程序中为我提供答案吗?
-
我不是 Android 开发人员,但我相信您可以使用相同的技术实现相同的目标 - 将所有 UI 嵌入到容器中,并在需要时减小其大小
-
您的示例项目是迄今为止我遇到的最佳解决方案。我已经检查了您的示例项目,它可以工作,但它与 iPhone X+ 设备几乎没有问题。点击呼叫栏不起作用。您能更新您的示例项目吗?
标签: ios voip pjsip uistatusbar in-call