Create Android Spelling Checker Service


The spelling checker framework enhances the text inputs experiences on Android by assisting the user quickly identifying and correcting spelling errors. When an application framework uses the spell, allows the user to  see a red underline below misspelled or unrecognizable words that the user can immediately correct errors by selecting a suggestion from a drop down list.

If you have an input method editor (IME) developer, under the spell gives you a great way to make an even better experience for users. You can create your own spelling checker service to your IME for consistent spelling corrections from your own custom word list offering. Your spell checker can identify and suggest corrections for vocabularies that matter most to your users, and if your language is not supported by the built-in spell checker, you can use a spell checker for that language.

The spelling checker APIs you can create your own spell checker service with minimal steps. Framework for the interaction between your spelling checker service and a text input field. In this post we will give you an overview of how to implement a spellchecker service. For more details, take a look at the spelling checker Framework API Guide.

Create a spelling checker service class

To create a spelling checker service, the first step is to create a spelling checker service class that extends

android.service.textservice.SpellCheckerService

For a working example of a spelling checker, you may want to take a look at the SampleSpellCheckerService class in the SpellChecker sample app, available from the Samples download package in the Android SDK.

Implement the required methods

Next, in your subclass of SpellCheckerService, implement the methods createSession() and onGetSuggestions(), as shown in the following code snippet:

@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 TextInfo
        return suggestionsInfo;
    }
}

Note that the input argument textInfo of onGetSuggestions(TextInfo, int) contains a single word. The method returns suggestions for that word as a SuggestionsInfo object. The implementation of this method can access your custom dictionary and any utility classes for extracting and ranking suggestions.

For sentence-level checking, you can also implement onGetSuggestionsMultiple(), which accepts an array of TextInfo.

Register the spelling checker service in AndroidManifest.xml

In addition to the performance of your subclass, you need to declare the spelling checker service in your manifest file. The declaration specifies the application, service, and a metadata file that defines the activity to use to control the settings. Here is an example:

<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-data
                android:name="android.view.textservice.scs"
                android:resource="@xml/spellchecker" />
        </service>
    </application>
</manifest>

Create a metadata XML resource file

Last, create a metadata file for your spelling checker to define the Activity to use for controlling spelling checker settings. The metadata file can also define subtypes for the spelling checker. Place the file in the location specified in the
element of the spelling checker declaration in the manifest file.

In the example below, the metadata file spellchecker.xml specifies the settings Activity asSpellCheckerSettingsActivity and includes subtypes to define the locales that the spelling checker can handle.

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

Add batch processing of multiple sentences

For faster, more accurate spell-checking, Android 4.1 (Jelly Bean) introduces APIs that let clients pass multiple sentences to your spelling checker at once.

To support sentence-level checking for multiple sentences in a single call, just override and implement the method onGetSentenceSuggestionsMultiple(), as shown below.

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

In this case, textInfo is an array of TextInfo, each of which holds a sentence. The method returns lengths and offsets of suggestions for each sentence as a SentenceSuggestionsInfo object.

Documents and samples

If you’d like to learn more about how to use the spelling checker APIs, take a look at these documents and samples:

  • Spelling Checker Framework API Guide — a developer guide covering the Spelling Checker API for clients and services.
  • SampleSpellCheckerService sample app — helps you get started with your spelling checker service.
    • You can find the app at /samples/android-15/SpellChecker/SampleSpellCheckerService in the Samples download.
  • HelloSpellChecker sample app — a basic app that uses a spelling checker.
    • You can find the app at /samples/android-15/SpellChecker/HelloSpellChecker in the Samples download.

To learn how to download sample apps for the Android SDK, see Samples.

Posted by Satoshi Kataoka and Ken Wakasa of the Android text input engineering team

Tags: , , ,

Comments & Responses

Leave a Reply

Your email address will not be published. Required fields are marked *

*


− 5 = 2

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>