如何在设备的前台应用程序中显示双高绿色状态栏(通话中)?
How to show double height green statusbar (In-Call) in foreground app on device?
这里有很多问题要求在后台显示红色录音条。很明显,我应该为此使用 AVAudioSession
类别 AVAudioSessionCategoryPlayAndRecord
。我的问题是,当我的应用程序中正在进行 VOIP 通话时,如何在前台应用程序中显示绿色的通话中栏(或至少是红色栏)?所以我可以 return 调用 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 的答案。对于那些要寻找答案的人,我可能会建议您自己做几个选择:
- 将根 viewcontroller 包裹在容器中,例如 Apple's iAdSuite with Storyboards example. Take a look at my sample project。可能是制作该酒吧的最佳方式。
- Hack UINavigationBar 高度(参见 this 方法)- 尚不适用于横向,但可能已解决
- 自己控制主要的 UIWindow 框架,在状态栏下放置另一个 UIWindow 所需的内容。
我调查了这两个应用程序(WhatsApp 和 Skype),了解到它们使用自己的 UIView 来实现此功能。
这是 Skype:
这里是WhatsApp(Reveal无法获取真实截图,但传达了基本思想):
在这两个应用程序中,它是一个从屏幕顶部开始的 UIView 以及用于格式化输出文本/句柄触摸的几种方法。
苹果在iOS10推出CallKit.framework,但是好像也没有那种功能,只能自己动手了
Roman Ermolov 的回答解释说,一些应用程序使用自己的 UIView
来实现此功能,但没有解释如何使用。在我看来,你有几个选择。
如果您想将视图放置在当前视图控制器之上(并覆盖),您可以使用 UILabel
或您自己的 UIWindow
创建一个 UIView
并添加作为您的应用程序的子视图 keyWindow
.
要让视图保持在顶部而不覆盖视图控制器的内容,您可以采用与上述相同的方法并手动调整应用程序 window 或 window 的根视图控制器的大小当您添加呼叫栏子视图时。或者,您可以创建一个 UIViewController
基础 class,其中包含此调用栏子视图和视图高度约束的出口。此约束的默认值应为零。然后,在拨打电话时,将高度限制更改为所需的回叫高度。这种约束方法也可能适用于应用程序的 UIWindow
,但我不太熟悉在应用程序的 window.
上使用约束
这里有很多问题要求在后台显示红色录音条。很明显,我应该为此使用 AVAudioSession
类别 AVAudioSessionCategoryPlayAndRecord
。我的问题是,当我的应用程序中正在进行 VOIP 通话时,如何在前台应用程序中显示绿色的通话中栏(或至少是红色栏)?所以我可以 return 调用 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 的答案。对于那些要寻找答案的人,我可能会建议您自己做几个选择:
- 将根 viewcontroller 包裹在容器中,例如 Apple's iAdSuite with Storyboards example. Take a look at my sample project。可能是制作该酒吧的最佳方式。
- Hack UINavigationBar 高度(参见 this 方法)- 尚不适用于横向,但可能已解决
- 自己控制主要的 UIWindow 框架,在状态栏下放置另一个 UIWindow 所需的内容。
我调查了这两个应用程序(WhatsApp 和 Skype),了解到它们使用自己的 UIView 来实现此功能。
这是 Skype:
这里是WhatsApp(Reveal无法获取真实截图,但传达了基本思想):
在这两个应用程序中,它是一个从屏幕顶部开始的 UIView 以及用于格式化输出文本/句柄触摸的几种方法。
苹果在iOS10推出CallKit.framework,但是好像也没有那种功能,只能自己动手了
Roman Ermolov 的回答解释说,一些应用程序使用自己的 UIView
来实现此功能,但没有解释如何使用。在我看来,你有几个选择。
如果您想将视图放置在当前视图控制器之上(并覆盖),您可以使用 UILabel
或您自己的 UIWindow
创建一个 UIView
并添加作为您的应用程序的子视图 keyWindow
.
要让视图保持在顶部而不覆盖视图控制器的内容,您可以采用与上述相同的方法并手动调整应用程序 window 或 window 的根视图控制器的大小当您添加呼叫栏子视图时。或者,您可以创建一个 UIViewController
基础 class,其中包含此调用栏子视图和视图高度约束的出口。此约束的默认值应为零。然后,在拨打电话时,将高度限制更改为所需的回叫高度。这种约束方法也可能适用于应用程序的 UIWindow
,但我不太熟悉在应用程序的 window.