iOS确定VoiceOver是否还在说话

时间:2012-02-20 15:32:03

标签: iphone ios uikit voiceover

有没有办法确定VoiceOver当前是否正在宣布以及何时停止。我已经尝试过UIAccessibilityVoiceOverStatusChanged,但我的理解是,只有当你打开或关闭VoiceOver时才会这样。任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:1)

我们使用otherAudioIsPlaying,问题是某些应用程序在后台运行,就像一些计步器监视器等。打开它看起来的音频并且永远不会释放它所以即使实际上没有发出任何声音或播放其他音频IsPlaying总是返回1直到你删除来自后台的其他应用程序。所以现在你不仅可以不播放音乐,而且你不知道后台的另一个应用程序会破坏这个测试。 Apple确实需要输入一个API来确定Voice Over当前是否正在发言。

答案 1 :(得分:0)

这些是我在文档中找到的所有辅助功能布尔值:

UIAccessibilityPostNotification
UIAccessibilityIsVoiceOverRunning
UIAccessibilityIsMonoAudioEnabled
UIAccessibilityIsClosedCaptioningEnabled
UIAccessibilityRegisterGestureConflictWithZoom

我认为没有任何布尔人可以做你正在谈论的事情。

答案 2 :(得分:0)

您可以使用音频会话的“OtherAudioIsPlaying”属性来检查当前是否有其他系统进程正在使用音频硬件。如果VoiceOver说话,它应该是“真实的”,如果不是,则应该是“假”。

实际上,如果用户在后台播放音乐,这可能无法正常工作。但是大多数运行VoiceOver的用户通常不会永久启用任何其他音频,因为这会让人更难理解VoiceOver所说的内容。

以下是一个使用示例:

UInt32 otherAudioIsPlaying;
UInt32 propertySize = sizeof(otherAudioIsPlaying);

AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying,&propertySize, &otherAudioIsPlaying);

if(otherAudioIsPlaying) {
    // other application is generating sound output (including VoiceOver)
    // but might also be any other app (like iPod App)
}