创建你自己的拼写检查服务

Posted by Satoshi Kataoka and Ken Wakasa of the Android text input engineering team。翻译:tamer.cnblogs.com

  拼写检查器框架通过帮助用户快速的识别并纠正拼写错误来提高Android平台的输入体验。当App使用了拼写检查器框架后,用户可以看到在拼错的或不能识别的字符下有红色的下划线,这样用户就可以通过选择下拉列表提供的建议词组快速地纠正错误。
  如果你是一个输入法(IME)开发者,那么拼写检查器框架给你一个非常好的方式来为你的用户提供更好的体验。你可以为你的IME添加你自己的拼写检查器服务,从你自定义的字典中来提供一致的拼写错误修正。你的拼写检查器能够识别并为这些词汇提供正确的建议,这对你的用户来说是非常重要的,并且如果内建的拼写检查器并不支持你的语言,你可以提供一个支持那种语言的拼写检查器。

  拼写检查器的API让你用很少的步骤就能创建你自己的拼写检查器服务。这个框架管理着你的拼写检查器服务与文本输入域的交互。在这篇文章中,我们会给你一个如何实现拼写检查器服务的概述。详情请看拼写检查器框架API指南。

1. 创建一个拼写检查器服务器类

  为了创建一个拼写检查器服务,第一步要创建一个继承自android.service.textservice.SpellCheckerService的拼写检查器服务类。

  为了能实现一个拼写检查器的例子,你可以学习一下Android SDK提供的SpellChecker例子程序中的SampleSpellCheckerService类,

2. 实现需要的方法

  下一步,在你的SpellCheckerService子类中,实现下面代码块显示的createSession()和onGetSuggestions()方法,

@Override
public Session createSession() { return new AndroidSpellCheckerSession();
}private static class AndroidSpellCheckerSession extends Session { @Override public SuggestionsInfo onGetSuggestions(TextInfo textInfo, int suggestionsLimit) {SuggestionsInfo suggestionsInfo;... // look up suggestions for TextInforeturn suggestionsInfo;}
}

  注意onGetSuggestions(TextInfo,int)的输入参数textInfo包含了一个单词。此方法返回一个包含建议单词的SuggestionsInfo对象。这个方法的实现能访问你自定义的词典和任何工具类来提取和排列建议单词。
  对于句子级别的检查,你可以实现能接受TextInfo数组的onGetSuggestionsMultiple()方法。

3. 在AndroidManifest.xml注册拼写检查器服务

  为了实现你的子类,你需要在你的manifest文件中声明的你拼写检查器服务。这个声明指定了application、service和定义用于控制设置界面的Activity的元数据文件。这有一个例子:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.android.samplespellcheckerservice"><application android:label="@string/app_name"><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-dataandroid:name="android.view.textservice.scs"android:resource="@xml/spellchecker" /></service></application>
</manifest>

  注意这个服务必须要求有android.permission.BIND_TEXT_SERVICE权限,以确保只有系统能绑定到这个服务。

4. 创建一个元数据XML资源文件

  最后一步,为你的拼写检查器创建一个元数据文件用来定义设置拼写检查器的Activity。元数据文件也可以为拼写检查器定义子类型。把这个文件放置在manifest中指定的位置。
  在下面的例子中,spellchecker.xml元数据文件指定了SpellCheckerSettingsActivity作为设置Activity,并且包含了子类型来定义拼写检查器可以处理的语言区域。

<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"android:label="@string/spellchecker_name"android:settingsactivity="com.example.SpellCheckerSettingsActivity" /><subtype android:label="@string/subtype_generic" android:subtypeLocale="en" />
</spell-checker>

  现在,你的拼写检查器服务就可以为你的应用程序(例如你的IME)工作了。

知识精粹:为多个句子添加批量处理

  为了更快、更精准的拼写检查,Android4.1加入了让客户端一次处理多个句子的API。

  在单次调用时,为了让多个句子支持句子级别的检查,只需要重写和实现onGetSentenceSuggestionsMultiple()这个接口就可以了,就像下面显示的:

private static class AndroidSpellCheckerSession extends Session { @Override public SentenceSuggestionsInfo[] onGetSentenceSuggestionsMultiple(TextInfo[] textInfo, int suggestionsLimit) {SentenceSuggestionsInfo[] sentenceSuggestionsInfos;... // look up suggestions for each TextInforeturn sentenceSuggestionsInfos}
}

在这种情况下,textInfo是一个TextInfo数组,每一个textInfo都含有一个句子。这个方法把每一个句子的建议语句的长度和偏移作为一个SentenceSuggestionsInfo返回。

文档和例子

  如果你想学习更多关于如何使用拼写检查器的API,请查看这些文档和例子:
1. 拼写检查器框架API指南——一个涵盖了拼写检查器客户端和服务端API的开发指南。
2. SampleSpellCheckerService例子程序——帮助你对拼写检查器服务入门。
  你可以在/samples/android-15/SpellChecker/SampleSpellCheckerService找到这个程序。
3. HelloSpellChecker例子程序——一个使用拼写检查器的基本程序。
  你可以在/samples/android-15/SpellChecker/HelloSpellChecker找到这个程序。
为了学习如何下载Android SDK的例子程序,请看Samples。

转载于:https://www.cnblogs.com/tamer/archive/2012/08/17/2644411.html

[Google Android] Creating Your Own Spelling Checker Service相关推荐

  1. Google Android向华为“闭源”,华为手机迎来至暗时刻!

    作者 | 屠敏 转载自CSDN(ID:CSDNnews) 居安思危任正非,未雨绸缪如华为.在贸易战的背景下,即使早在多年前已在多个层面做好"备胎"计划的华为,在面对美国对芯片乃至操 ...

  2. Google Android 向华为“闭源”!华为手机迎来至暗时刻!

    作者 | 屠敏 出品 | CSDN(ID:CSDNnews) 居安思危任正非,未雨绸缪如华为.在贸易战的背景下,即使早在多年前已在多个层面做好"备胎"计划的华为,在面对美国对芯片乃 ...

  3. Google Android软件架构

    Google Android软件架构 Android系统架构分为四层,从高到低为 Applications Application Framework Libraries and Android Ru ...

  4. Google Android开发入门与实战

    Google Android开发入门与实战 [作 者]靳岩;姚尚朗 [同作者作品] [作译者介绍]  [出 版 社] 人民邮电出版社     [书 号] 9787115209306  [上架时间] 2 ...

  5. 《Google Android 开发入门与实战》

    <Google Android 开发入门与实战>(含1张DVD光盘) 市 场 价:¥55 书 号:9787115209306 出版日期:2009 年6月 开 本:16开 页码:340 [内 ...

  6. Google Android开发入门与实战 视频教程 源代码 游戏应用开发 传送门

    Google Android开发入门与实战 视频教程 视频目录 http://www.youku.com/playlist_show/id_5098662.html http://www.youku. ...

  7. Google Android SDK开发范例大全

    1. 图书信息: Google Android SDK开发范例大全(第2版)     人民邮电出版社 2010-6-1 0:00:00 余志龙;陈昱勋;郑名杰;陈小凤;郭秩均 79 元 ISBN:97 ...

  8. Google Android Developer

    Google Android Developer 我记得我学习Android那会儿,老师也不是很会Android,所有经常是对着Google的文档读,那个时候翻墙也是个麻烦事,再加上全英文的时候文档, ...

  9. Google Android开发入门与实战(china-pub首发免运费)

    Google Android开发入门与实战(china-pub到货首发免运费) [作 者]靳岩;姚尚朗 [同作者作品] [作译者介绍]  [出 版 社] 人民邮电出版社     [书 号] 97871 ...

最新文章

  1. Hue、Hive、Sentry、Airflow、Oozie
  2. 第八周项目二-用对象数组操作长方柱类
  3. 使用锁实现多线程共用一个数据源
  4. 移动**21*设置无法接通_电话打得出去,但别人打你的电话提示用户无法接通,是怎么回事?...
  5. android bitmap xml,XML Bitmap
  6. asp.net core结合Gitlab-CI实现自动化部署
  7. 【M25】将构造方法和非成员方法虚化
  8. 公司邮箱发邮件的util类
  9. Flask框架的学习与实战:实战小项目
  10. 中国科学院全国名词委组合数学和计算机科学研究开发中心 顾同新,有关组合数学家陆家羲的几点史实澄清.doc...
  11. 老路教你用得上的商学课_系列笔记
  12. 查看自己电脑连接过的WiFi密码
  13. 币圈IDO与ICO/IPO的区别和联系
  14. 《烟花》动漫电影 观后感
  15. “黑产“识别算法(社区检测,相似度,关联关系)
  16. php视频降清晰度,HTML5视频播放器-video-js(带清晰度切换) | 小灰灰博客
  17. 苹果发布2021款iPad Pro,并搭载M1芯片,性能大幅提升
  18. 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较
  19. HIT 深入理解计算机系统 大作业 程序人生-Hello’s P2P
  20. 如何在线压缩图片至200K?图片压缩用什么?

热门文章

  1. IAR中断定义#pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void)啥意思?
  2. springmvc二十一:自定义类型转换器
  3. 目标检测——Faster R_CNN使用smooth L1作为bbox的回归损失函数原因
  4. 如何进行5万并发用户负载测试?
  5. Setting Up Hadoop NameNode High Availability
  6. PHP Fatal error: Class #39;DOMDocument#39; not found
  7. 【GoLang】GoLang 遍历 map、slice、array方法
  8. lor: 一个基于OpenResty的lua framework
  9. iOS编程陷井2,模拟器不可靠
  10. 关于《设计模式》这本书(三)——Proxy模式