服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

开发语音控制,我得到了这些经验!

日期: 来源:CSDN收集编辑:

【CSDN 编者按】语言控制向很多无法充分挖掘 iPhone 潜力的人敞开了 iOS 的大门。

原文链接:https://www.swiftjectivec.com/voice-control-accessibility-tweaks-ios/

未经授权,禁止转载!


作者 | Jordan Morgan   译者 | 弯月
出品 | CSDN(ID:CSDNnews)

语音控制是 iOS 设备上提供的一项突破性辅助技术,由 Cupertino & Friends™️ 开发。这项技术在 iOS 13 中首次亮相,有了这项技术,你就可以通过语音控制 iPhone 了。

你可以试试看,拿起手机,然后说:“嘿 Siri,打开语音控制。”

请注意,如果这是你第一次使用语音控制,那么可能 iOS 需要下载一次性的配置文件才能正常使用。语音控制在 macOS 上也可用,可能也需要相同的设置。

在语音控制被激活后,你就可以通过各种命令导航和使用 iOS 了,命令的形式为“一个动词+一个名词”。例如,“打开手电筒”或“播放音乐”。如果你不确定自己能干什么,甚至可以说“显示命令”或“告诉我该说什么”,这样就能获得一些提示。

语音控制主要有三种显示模式。如果某个功能支持辅助引擎,则可以看到:

  • 项目名称:对应于该功能的 accessibilityLabel 值。

  • 编号:每个选项的编号。

  • 网格:这些线将界面分割成一个个网格,这样你就可以专注研究一个区域。


辅助功能测试


开发人员可能没有意识到的一件事是,语音控制除了可以帮助残障人士打开 iPhone 之外,对于 iOS 工程师来说,这其实是一个代码作弊神器。

为什么?因为你可以看到界面内所有 accessibilityLabel(可访问性标签)的值!

你可以很轻松地看到自己漏掉了什么。如果你不熟悉 iOS 上的辅助功能编程,可能觉得这些可访问性标签也没什么大不了,其实你应该了解一下这些属性。

选项名称是默认模式,因此你能够快速盘点所有的选项。这些天来,这一直是我测试我们的产品 Voice Over 的最佳方式。如果你发现某个可访问性标签不太适合语音控制,则可以通过 API 来修改:

// In UIKitopen var accessibilityUserInputLabels: [String]!// In SwiftUI.accessibilityInputLabels([Text])

这个字符串数组可以帮助语音控制功能做出响应。最重要的是,数组中的第一个字符串将取代界面显示的可访问性标签值。

回忆一下,设置的图标一般是一个小齿轮。假设你有一个视频编辑应用,如下所示:

struct SettingsButton: View {  var body: some View {    Button {      openAudioSettings()    } label: {      Image(systemName: "gear.circle")    }    .accessibilityLabel("Audio Levels and Mixing Settings")  }}

为了指示 Siri 正确打开这个应用,我们需要说:“Open audio levels and mixing settings”,其中 “Open” 是动词,意思是打开,而 “audio levels and mixing settings” 就是上述代码中设置的可访问性标签的值。这个指令显然太啰嗦了,我们可以利用 accessibilityInputLabels 完成以下两件事:

1.缩短指令。

2.指定语音控制的响应内容。

如下所示:

struct SettingsButton: View {  private let axVoiceControlCommands: [Text] = [    Text("Audio Settings"),    Text("Settings"),    Text("Audio Levels"),    Text("Mixing Settings")  ]  var body: some View {    Button {      openAudioSettings()    } label: {      Image(systemName: "gear.circle")    }    .accessibilityLabel("Audio Levels and Mixing Settings")    .accessibilityInputLabels(axVoiceControlCommands)  }}

如此一来,我们就可以使用 accessibilityInputLabels 中指定的任何一个词语作为指令:“Open Audio Settings”、“Open Settings”、“Open Audio Levels” 或者 “Open Mixing Settings”。


难点


最近,我一直在改进我们的语音控制体验。虽然,现在我们的语音控制体验可以正常运行了,但在这个过程中,我遇到了很多挫折。

相似的项目名称

我发现,有几个地方出现了相同的可访问性标签值。如下图所示,“Create a post for this time” 反复显示:

于是,我就在想这是不是一个问题。结果发现,照片应用也有同样的“问题”,因此我想知道他们是如何处理的。最终发现,原来是语音控制解决了这个问题。

当你发出的指令涉及多个显示标签时,比如下图中 “Tap Live Photo”,iOS 就会在每张照片上显示一个数字编号,这样就可以消除歧义了:

很聪明的做法。


冗长的名称


有时候,我不知道用什么样的字符串与界面交互。例如,在我们的设计中,网格中的每一项可以代表任何操作。你可以将它们视为社交媒体帖子。在这种情况下,似乎直接念出文本并不太方便,尤其是如果文本是URL的话,未免也太冗长了。

最后,我决定使用编号。这种方法不仅可以让每一项都成为独一无二的存在,而且打开操作也非常容易。

在下图中,右边是默认的显示,左边是我最后采用的编号方式:


没有用于检测语音控制的 API


最后,我遇到了一个最棘手的问题。我们无法通过 API 检测何时语音控制处于使用状态。所以,我们不能编写下面这样的代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {  if indexPath.row == TheOneWithTheSwitchInIt {    if UIAccessibility.isVoiceOverRunning {      // Perform some action that toggling      // The UISwich would normally do    }  }  }

为什么我们要写这样的代码?因为某些网格内的单元格有 UISwitch 控件。这是一个标准的用户体验,在 iOS 中随处可见。我们写这段代码的原因是,有可能人们不会点击格子与它们互动,而是直接使用开关控件。

但对于 Voice Over,这种行为正是我们需要的。问题在于,语音控制不适合这样的设置。请注意如下单元格 “Pause Queue Off”:

如果用户说“Tap Pause Queue Off”,上面的逻辑就会触发,但是检查 Voice Over 却得不到任何响应。重要的是,Voice Over 和 Voice Control 是相互排斥的,你只能使用其中之一。

我多么希望苹果有一个简单的 API 来检查语音控制的状态,就像下面这样:

UIAccessibility.isVoiceControlRunning

然而,很遗憾,我们没有。因此,解决这样的问题就会非常困难。


最后的想法


语音控制非常酷,它是苹果推出的一项我个人非常喜欢的技术。但是,相关的开发还是有一些陷阱,例如你无法通过 API 检测语音控制是否正在运行,这仍然让我感到困惑。

然而,这是测试个人语音控制实现的最佳方式之一。最重要的是,它向很多无法充分挖掘 iPhone 潜力的人敞开了 iOS 的大门。

☞ChatGPT 的开源“替代”来了!前 OpenAI 团队出手,能用中文提问,3 天斩获 3k+ Star
☞烧数亿美元、耗上万颗英伟达 GPU,微软揭秘构建 ChatGPT 背后超级计算机往事 !
☞GPT-4 发布:在考试中击败 90% 的人类;谷歌开放大语言模型 PaLM API;FireFox 111 发布|极客头条

相关阅读

  • 好一抹娇羞

  • 大号出问题了大伙赶紧关注备用 01 树上的朋友,树下的朋友,跟着我们摇起来 02 以后网上买衣服就这么干 03 老丢东西区 04 来来来,一挑二,决战到天明! 0
  • 提醒!天津这项缴费3月31日截止!

  • 点击↑蓝字,输入“居民医保”获得医保缴费入口需要缴纳2023年度城乡居民医保的朋友看过来核桃又给大家带好消息啦!对于没有及时缴纳的朋友现在城乡居民医保缴纳时间又延长了到
  • @天津车主!3月18日天津这些地方有交通管制!

  • 点击↑蓝字,输入“桃花节”获得天津桃花节攻略本周六(3月18日)天津高三学子将进行高考英语科目第一次考试在这里提前预祝大家考一个好成绩为了给各位考生营造一个良好的考试环
  • 天津新增文玩大集,每周五都有!

  • 点击↑蓝字,输入“赏花”获得天津赏花攻略最近核桃迷上了盘串看着手上的这串星月菩提别提心里有多高兴了核桃知道在咱大天津有不少喜欢古玩、各种老物件的朋友核桃在这里跟大
  • 就在昨晚,大部分人的工作方式都被微软彻底颠覆了。在微软刚举办的 Microsoft 365 Copilot 发布会上,微软正式把 OpenAI 的 GPT-4 模型装进了 Office 套件,推出了全新的 AI 功能
  • 听说,北大同学有200多种爱好?

  • ·阳春三月,时当宴会想约上三五好友分享美食?想跟随韵律舒展起舞?还想畅谈诗书、探索世界?那就来北大的这场初春盛会看看吧!170家社团尽展风采燕园、昌平两大校区快乐加倍舞蹈、

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 开发语音控制,我得到了这些经验!

  • 【CSDN 编者按】语言控制向很多无法充分挖掘 iPhone 潜力的人敞开了 iOS 的大门。原文链接:https://www.swiftjectivec.com/voice-control-accessibility-tweaks-ios/未经授
  • 开源精神奠基人诞生 | 历史上的今天

  • 整理 | 王启隆透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。今天是 2023 年 3 月 16 日,在 2005 年的今天,腾讯收购国内第二大邮件客户端软件 Foxmail。腾讯于当日
  • 【冷兔•槽】每日一冷NO.3639

  • 冷兔槽,任何人在任何时间突然分道扬镳很正常。微博@佐仓雪芬Official:互联网普遍以为20出头的男人喜欢看的:擦边球瑟琴真正的20出头的男人喜欢看的:撞车视频,修复旧物,锻刀大赛,外