编程语言
首页 > 编程语言> > 有没有办法以编程方式确定Android设备是否内置了拼写检查程序?

有没有办法以编程方式确定Android设备是否内置了拼写检查程序?

作者:互联网

我在placescouple中读过,三星设备上的EditText无法启用拼写检查……所以它必须是真的,对吧?如果是这样,可能还有其他设备也无法进行拼写检查,例如我妻子刚刚从Verizon购买的LG VK700平板电脑(请勿询问).

有没有办法以编程方式检测设备是否可以进行拼写检查?我想要一个用户可以打开或关闭它的选项,但如果无法打开则不能.我希望这个选项变灰了.

(谷歌搜索以编程方式确定Android设备是否可以拼写检查this,这看起来很有趣,但我不能证明大部分用户可能会关闭或忽略大量工作(这里是慢学习者),因为标记的单词会仅出现在与用户的“单词模式”匹配的单词列表中(例如,p?tt ?? n),用于解决单词拼图.)

解决方法:

根据Android Spell Checker Framework documentation,拼写检查服务应作为服务在应用程序的清单中公开,并带有特定的意图过滤器和元数据标签:

<service
    android:label="@string/app_name"
    android:name=".SampleSpellCheckerService"
    android:permission="android.permission.BIND_TEXT_SERVICE" >
    <intent-filter >
        <action android:name="android.service.textservice.SpellCheckerService" />
    </intent-filter>

    <meta-data
        android:name="android.view.textservice.scs"
        android:resource="@xml/spellchecker" />
</service>

合理地说,我们应该能够通过尝试解决匹配的意图来检测是否安装了任何此类服务.

我没有三星设备来测试“未找到”的情况,但我认为这应该有效:

TextView tv = new TextView(this);
PackageManager pm = getPackageManager();
Intent spell = new Intent(SpellCheckerService.SERVICE_INTERFACE);
ResolveInfo info = pm.resolveService(spell, 0);
if (info == null) {
    tv.setText("no spell checker found");
} else {
    tv.setText("found spell checker " + info.serviceInfo.name + " in package " + info.serviceInfo.packageName);
}

无论我在“设置”中启用还是禁用拼写检查,我的Moto G(2013)都说:found spell checker com.android.inputmethod.latin.spellcheck.AndroidSpellCheckerService in package com.android.inputmethod.latin.

这与香草AOSP键盘相同.我认为有问题的三星手机用自己的键盘替换了这个包,而没有更换拼写检查服务?

请注意,即使您检测到匹配服务的存在,激活它的实际设置也可能因设备而异…

标签:android,spell-checking
来源: https://codeday.me/bug/20190829/1763111.html