MAUI劝退:屏幕阅读器和文本转语音(微软你能更搞笑些吗)
MAUI劝退:屏幕阅读器和文本转语音(微软你能更搞笑些吗)
vs2022生成的默认项目代码使用了屏幕阅读器,然而完全无用,真是搞笑。
正确的做法是使用文本转语音功能。
目录
一、VS2022默认MAUI项目
Visual Studio 2022 MAUI项目默认的代码是个按钮,按钮处理代码是这样的:
private void OnCounterClicked(object sender, EventArgs e)
{
count++;
if (count == 1)
CounterBtn.Text = $"Clicked {count} time";
else
CounterBtn.Text = $"Clicked {count} times";
SemanticScreenReader.Announce(CounterBtn.Text);
}
代码很简单,前面是修改按钮上的文本,最后一句是朗读按钮上的文本。
二、SemanticScreenReader
SemanticScreenReader是屏幕阅读器,Announce就是读出指定的文本。看起来太容易了。能放在初始样板代码里的,能不简单吗?
三、屏幕阅读无效
然而,这句话从来没有工作过!在widdows和安卓都不行!实体机和模拟器都不行!iOS还没试,估计也不行。
究竟怎么回事呢?原来,屏幕阅读器是个系统功能,属于“辅助功能”,在Windows上叫做“讲述人”,在安卓上叫做“TalkBack”,为了使用上面那句功能,必须首先打开这个辅助功能,然后才能朗读。可是,打开这个功能后,会自动朗读所有点击到的内容,而不仅仅是我们希望朗读的,更恶心的是,打开这个功能后界面操作也变了,必须要学习一套复杂的操作方式才能使用,想退出都不知道怎么退出。
为什么不是一个悬浮图标,点一下图标再点一下屏幕才朗读呢?
所以这行代码看起来简单强大其实毫无价值啊!
四、文本转语音有效
真正用来朗读的功能叫“文本转语音”,其实也一样简单,核心代码就一句:
TextToSpeech.Default.SpeakAsync(文本);
上面这一句就能朗读文本,实测在windows和安卓上都不需要额外处理。
改过的代码:
private void OnCounterClicked(object sender, EventArgs e)
{
count++;
if (count == 1)
CounterBtn.Text = $"Clicked {count} time";
else
CounterBtn.Text = $"Clicked {count} times";
//SemanticScreenReader.Announce(CounterBtn.Text);
_= TextToSpeech.Default.SpeakAsync(CounterBtn.Text);
}
不过,官方文档(文本转语音 - .NET MAUI | Microsoft Learn)说安卓需要设置(iOS和Windows不需要设置):

这段代码是:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
默认项目的设置是:

或许是目标版本比较低的原因吧。
(这里是文档结束)
更多推荐


所有评论(0)