You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:56