是否有任何方法可以通过编程确定android设备是否内置拼写检查器?

是否有任何方法可以通过编程确定android设备是否内置拼写检查器?,android,spell-checking,Android,Spell Checking,我在一篇文章中读到,三星设备上的EditText无法启用拼写检查。。。那一定是真的,对吧?如果是这样的话,可能还有其他设备也不能进行拼写检查,比如我妻子刚从Verizon(不问)买的LG VK700平板电脑 是否有任何方法可以通过编程检测设备是否可以进行拼写检查?我希望用户可以选择打开或关闭设备,但如果无法打开,则不能。我想让选项变成灰色 (谷歌以编程的方式确定android设备是否可以进行拼写检查,这看起来很有趣,但我不能为大多数用户可能会关闭或忽略的东西做大量工作(这里是慢速学习者),因为标

我在一篇文章中读到,三星设备上的
EditText
无法启用拼写检查。。。那一定是真的,对吧?如果是这样的话,可能还有其他设备也不能进行拼写检查,比如我妻子刚从Verizon(不问)买的LG VK700平板电脑

是否有任何方法可以通过编程检测设备是否可以进行拼写检查?我希望用户可以选择打开或关闭设备,但如果无法打开,则不能。我想让选项变成灰色

(谷歌
以编程的方式确定android设备是否可以进行拼写检查,这看起来很有趣,但我不能为大多数用户可能会关闭或忽略的东西做大量工作(这里是慢速学习者),因为标记的单词只会出现在与用户“单词模式”匹配的单词列表中(例如,
p?tt??n
)用于解决字谜。)

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

<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>
不管我是在设置中启用还是禁用拼写检查,我的Moto G(2013)说:

这是与香草AOSP键盘相同的软件包。我假设有问题的三星手机已经用自己的键盘替换了这个软件包,而没有替换拼写检查服务

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

要查看如果设备内置拼写检查器,请使用此
xml

<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
               android:label="spellchecker_name"
               android:settingsActivity="com.example.SpellCheckerSettingsActivity">
</spell-checker>
<CheckBoxPreference
    android:key="pref_spell_check"
    android:defaultValue="false"
    android:persistent="true"
    android:enabled="false"
    android:title="Spell checker"
    android:summary="Allow your phone's built-in spell checker to underline questionable matches"
    />
要提供拼写检查,还有很多工作要做。我:不感兴趣。
)

以下是
Java
代码,用于管理
首选项
以灰显
拼写检查器
选项,具体取决于用户的设备是否内置该选项

SettingsActivity.java

public class SettingsActivity extends Activity
{
  public static boolean blnSpellcheckerPresent; // slight hack

  @Override protected void onCreate(Bundle _savedInstanceState) {
    super.onCreate(_savedInstanceState);
    // Inserted Snild's code here:    
    PackageManager pm = getPackageManager();
    Intent spell = new Intent(SpellCheckerService.SERVICE_INTERFACE);
    ResolveInfo info = pm.resolveService(spell, 0);
    blnSpellcheckerPresent = (info != null);
    // end insert
    setContentView(R.layout.activity_settings);
  }
} // end class SettingsActivity
public class SettingsFragment extends PreferenceFragment
{
  @Override public void onCreate(Bundle _savedInstanceState){
    super.   onCreate(_savedInstanceState);

    addPreferencesFromResource(R.xml.preferences);

    Preference spellchecker = getPreferenceManager().findPreference("pref_spell_check");

    spellchecker.setEnabled(SettingsActivity.blnSpellcheckerPresent);

  }
} // end class SettingsFragment
设置片段.java

public class SettingsActivity extends Activity
{
  public static boolean blnSpellcheckerPresent; // slight hack

  @Override protected void onCreate(Bundle _savedInstanceState) {
    super.onCreate(_savedInstanceState);
    // Inserted Snild's code here:    
    PackageManager pm = getPackageManager();
    Intent spell = new Intent(SpellCheckerService.SERVICE_INTERFACE);
    ResolveInfo info = pm.resolveService(spell, 0);
    blnSpellcheckerPresent = (info != null);
    // end insert
    setContentView(R.layout.activity_settings);
  }
} // end class SettingsActivity
public class SettingsFragment extends PreferenceFragment
{
  @Override public void onCreate(Bundle _savedInstanceState){
    super.   onCreate(_savedInstanceState);

    addPreferencesFromResource(R.xml.preferences);

    Preference spellchecker = getPreferenceManager().findPreference("pref_spell_check");

    spellchecker.setEnabled(SettingsActivity.blnSpellcheckerPresent);

  }
} // end class SettingsFragment
下面是对
preferences.xml的补充:

<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
               android:label="spellchecker_name"
               android:settingsActivity="com.example.SpellCheckerSettingsActivity">
</spell-checker>
<CheckBoxPreference
    android:key="pref_spell_check"
    android:defaultValue="false"
    android:persistent="true"
    android:enabled="false"
    android:title="Spell checker"
    android:summary="Allow your phone's built-in spell checker to underline questionable matches"
    />


--谢谢,但是需要一个
xml
文件
spellchecker.xml
,我要看看是否可以把它放在一起。至少这是
Gradle
所说的:
Error:(36,39)没有找到与给定名称匹配的资源(在“资源”处,值为“@xml/spellchecker”)。
或者,如果您已经找到了,请修改。在你的链接中找到的
xml
文件有错误,我不知道如何修复:
但是如果我删除了
两个子类型
,那么你的
Java
代码告诉我我所知道的:
LG
没有拼写检查,而
Verizon
有。谢谢!!该xml是拼写检查服务(提供拼写检查功能)必须定义的内容。这是解释我当时发布的Java代码为何/如何工作的一部分(通过检测系统上是否有安装了此类服务的应用程序)。但是链接处的
xml
有错误。然后呢?不能忽视;格拉德尔抱怨。无论什么我另一个答案中的四行似乎检测正确。