当信号丢失(即没有用户交互)时如何播放画外音通知?
Posted
技术标签:
【中文标题】当信号丢失(即没有用户交互)时如何播放画外音通知?【英文标题】:How to play a Voiceover notification when signal lost (i.e., no user interaction)? 【发布时间】:2018-02-26 22:44:19 【问题描述】:我构建了一个简单的音频流应用程序,如下所示:
当我失去音频流连接时,我的应用会将此屏幕覆盖在 UI 顶部:
我想让盲人或视力不佳的人可以使用该应用,因此我希望 Voiceover 在信号丢失并出现覆盖屏幕时说出“信号丢失”和“重新连接”。这一切都是在没有任何用户交互的情况下发生的(类似于屏幕超时并且 VO 说“屏幕变暗”时发生的情况)。如果 VO 在重新连接时说“信号恢复”也很好,但不是绝对必要的。
更棘手的是,当“信号丢失”屏幕出现时,用户应该无法操作下面主 UI 中的任何其他字段。
我该如何做到这一点?
提前感谢您的帮助!
【问题讨论】:
【参考方案1】:您可以使用UIAccessibilityPostNotification
发出“通知”,这将使其大声朗读(仅在启用 VoiceOver 时):
UIAccessibilityPostNotification(
UIAccessibilityAnnouncementNotification,
"Signal Lost" as NSString
)
documentation for UIAccessibilityAnnouncementNotification
解释了 NSString
参数以及何时适合使用:
此通知包含一个参数,该参数是一个包含通知的 NSString 对象。辅助技术输出参数中包含的公告字符串。
使用此通知可提供有关不更新应用程序用户界面 (UI) 或仅短暂更新 UI 的事件的可访问性信息。
我的建议是谨慎使用公告,但我想说的是,在没有任何用户交互的情况下发生的事件通常(但并非总是)很好地使用它们。
【讨论】:
完美运行。谢谢!【参考方案2】:好吧,你可以创建一个语音的 mp3 录音,然后在屏幕出现时只使用 AVAudio 播放它。
【讨论】:
【参考方案3】:如果您设置播放音频但没有 MP3,您可以使用 AVFoundation:
import AVFoundation
创建一个综合警告等的函数,例如
/// Reads A Word Using Speech Syntheseis
///
/// - Parameters:
/// - word: String
func readWordAloud(_ word: String)
//1. Create The Word To Be Read Aloud
let wordReader = AVSpeechUtterance(string: word)
wordReader.volume = 1
//2. Pass It To The Speech Synthesizer
let speechSynthesizer = AVSpeechSynthesizer()
speechSynthesizer.speak(wordReader)
像这样调用方法:
readWordAloud("No Audio Available")
要禁用与UIView
的交互,只需使用:
self.view.isUserInteractionEnabled = false
【讨论】:
谢谢!这将一直阅读文本。我想要它,以便只有在旁白打开时才会说出文本。类似的非用户发起的事件确实会发生,例如当屏幕超时并且 VO 说“屏幕变暗”时。必须有某种机制来做到这一点。以上是关于当信号丢失(即没有用户交互)时如何播放画外音通知?的主要内容,如果未能解决你的问题,请参考以下文章
当通知到达并且应用程序在后台没有用户交互时,如何在 React Native 中执行操作?