如何以编程方式检查tvOS及Siri Remote中是否启用听写功能?
检测tvOS系统及Siri Remote的听写功能启用状态
刚好之前做tvOS项目时踩过这个坑,给你详细梳理下两种检测方式,都是用苹果官方公开API,完全合规:
一、检测系统级听写功能是否启用
tvOS的系统听写开关在「设置」→「Siri与搜索」里,我们可以通过AVFoundation框架的API来检测系统是否启用了听写,同时还要确认当前App是否拥有使用权限:
import AVFoundation func isSystemDictationEnabled() -> Bool { // 第一步:检查系统是否支持且启用了听写功能 guard AVSpeechRecognizer.isAvailable() else { return false } // 第二步:检查当前App是否被授予听写权限 let authStatus = AVSpeechRecognizer.authorizationStatus() return authStatus == .authorized }
代码说明:
AVSpeechRecognizer.isAvailable()会直接返回系统是否支持并启用了听写功能——如果用户在系统设置里关掉了听写,这个方法会返回false。authorizationStatus()用来确认当前App是否被允许使用听写服务,即使用户开了系统听写,App没权限也没法用。
二、检测Siri Remote的听写功能状态
Siri Remote的听写功能其实是依赖系统听写设置+App权限的,而且还需要麦克风权限(毕竟要收音)。要判断遥控器的听写是否可用,需要同时满足三个条件:
import AVFoundation func isSiriRemoteDictationAvailable() -> Bool { // 系统听写启用 guard AVSpeechRecognizer.isAvailable() else { return false } // App拥有听写权限 let dictationAuth = AVSpeechRecognizer.authorizationStatus() guard dictationAuth == .authorized else { return false } // App拥有麦克风权限 let micAuth = AVCaptureDevice.authorizationStatus(for: .audio) return micAuth == .authorized }
补充说明:
如果你的App还没请求过这些权限,记得主动调用请求方法:
// 请求听写权限 AVSpeechRecognizer.requestAuthorization { status in // 这里可以处理权限请求结果,比如更新UI } // 请求麦克风权限 AVCaptureDevice.requestAccess(for: .audio) { granted in // 处理麦克风权限结果 }
另外,一定要在Info.plist里添加对应的权限描述,否则会直接崩溃:
NSSpeechRecognitionUsageDescription:告诉用户你的App为什么需要听写权限(比如"需要通过听写快速输入内容")NSMicrophoneUsageDescription:说明为什么需要麦克风权限(比如"需要录制语音进行听写识别")
内容的提问来源于stack exchange,提问作者MGY
相关产品推荐
相关产品推荐

