android - 有没有办法以编程方式确定 android 设备是否具有内置拼写检查器?

标签 android spell-checking

我读过 coupleplaces无法在三星设备上为 EditText 打开拼写检查……所以它一定是真的,对吧?如果是这样,可能还有其他设备也无法进行拼写检查,例如我妻子刚从 Verizon 购买的 LG VK700 平板电脑(不要问)。

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

(谷歌搜索 programmatically determine whether android device can spellcheck turned up this ,这看起来很有趣,但我不能为大多数用户的东西证明很多工作(慢学习者,在这里)无论如何都可能会关闭或忽略,因为标记的单词只会出现在与用户的“单词模式”(例如,p?tt??n)匹配的单词列表中以解决单词难题。)

最佳答案

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

<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>

因此,我们应该能够通过尝试解析匹配的 Intent 来检测是否安装了任何此类服务。

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

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 - 有没有办法以编程方式确定 android 设备是否具有内置拼写检查器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725258/

相关文章:

php - 获取拼写检查器/更正 API?

java - 如何在服务中使用 ShowcaseView 库或类似的东西?

android - 我如何访问谷歌日历信息?

android - 在所有 Activity 中使用相同的 SlidingDrawer?

android - 如何像 Material 文档中那样创建一个Snackbar?

eclipse - TeXlipse 拼写检查配置

python - 比较字符串以匹配品牌名称并删除拼写错误

java - Java 中的拼写检查和/或拼写更正

android - 检测定义区域(封闭)之间屏幕(而非相机)上的颜色

html - 在 UIWebView 中的 div 或 pre 标签中禁用自动更正