page.title=Using the Spell Checker Framework parent.title=Articles parent.link=../browser.html?tag=article @jd:body

In This Document

  1. Spell Check Lifecycle
  2. Implementing a Spell Checker Service
  3. Implementing a Spell Checker Client

See also

  1. Spell Checker Service sample app
  2. Spell Checker Client sample app

The Android platform offers a spell checker framework that lets you implement and access spell checking in your application. The framework is one of the Text Service APIs offered by the Android platform.

To use the framework in your app, you create a special type of Android service that generates a spell checker session object. Based on text you provide, the session object returns spelling suggestions generated by the spell checker.

Spell Checker Lifecycle

The following diagram shows the lifecycle of the spell checker service:

Figure 1. The spell checker service lifecycle.

To initiate spell checking, your app starts its implementation of the spell checker service. Clients in your app, such as activities or individual UI elements, request a spell checker session from the service, then use the session to get suggestions for text. As a client terminates its operation, it closes its spell checker session. If necessary, your app can shut down the spell checker service at any time.

Implementing a Spell Checker Service

To use the spell checker framework in your app, add a spell checker service component including the session object definition. You can also add to your app an optional activity that controls settings. You must also add an XML metadata file that describes the spell checker service, and add the appropriate elements to your manifest file.

Spell checker classes

Define the service and session object with the following classes:

A subclass of {@link android.service.textservice.SpellCheckerService}
The {@link android.service.textservice.SpellCheckerService} implements both the {@link android.app.Service} class and the spell checker framework interface. Within your subclass, you must implement the following method:
{@link android.service.textservice.SpellCheckerService#createSession()}
A factory method that returns a {@link android.service.textservice.SpellCheckerService.Session} object to a client that wants to do spell checking.

See the Spell Checker Service sample app to learn more about implementing this class.

An implementation of {@link android.service.textservice.SpellCheckerService.Session}
An object that the spell checker service provides to clients, to let them pass text to the spell checker and receive suggestions. Within this class, you must implement the following methods:
{@link android.service.textservice.SpellCheckerService.Session#onCreate()}
Called by the system in response to {@link android.service.textservice.SpellCheckerService#createSession()}. In this method, you can initialize the {@link android.service.textservice.SpellCheckerService.Session} object based on the current locale and so forth.
{@link android.service.textservice.SpellCheckerService.Session#onGetSuggestions(TextInfo, int) onGetSuggestions()}
Does the actual spell checking. This method returns an object containing suggestions for the text passed to it.

Optionally, you can implement {@link android.service.textservice.SpellCheckerService.Session#onCancel()}, which handles requests to cancel spell checking, or {@link android.service.textservice.SpellCheckerService.Session#onGetSuggestionsMultiple(TextInfo[], int, boolean) onGetSuggestionsMultiple()}, which handles batches of suggestion requests, or both.

See the Spell Checker Client sample app to learn more about implementing this class.

Note: You must implement all aspects of spell checking as asynchronous and thread-safe. A spell checker may be called simultaneously by different threads running on different cores. The {@link android.service.textservice.SpellCheckerService} and {@link android.service.textservice.SpellCheckerService.Session} take care of this automatically.

Spell checker manifest and metadata

In addition to code, you need to provide the appropriate manifest file and a metadata file for the spell checker.

The manifest file defines the application, the service, and the activity for controlling settings, as shown in the following snippet:

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

        <activity
            android:label="@string/sample_settings"
            android:name="SpellCheckerSettingsActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Notice that components that want to use the service must request the permission {@link android.Manifest.permission#BIND_TEXT_SERVICE} to ensure that only the system binds to the service. The service's definition also specifies the spellchecker.xml metadata file, which is described in the next section.

The metadata file spellchecker.xml contains the following XML:

<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”
    />
    <subtype
            android:label="@string/subtype_generic"
            android:subtypeLocale="fr”
    />
</spell-checker>

The metadata specifies the activity that the spell checker uses for controlling settings. It also defines subtypes for the spell checker; in this case, the subtypes define locales that the spell checker can handle.

Accessing the Spell Checker Service from a Client

Applications that use {@link android.widget.TextView} views automatically benefit from spell checking, because {@link android.widget.TextView} automatically uses a spell checker. The following screenshots show this:


Figure 2. Spell checking in TextView.

However, you may want to interact directly with a spell checker service in other cases as well. The following diagram shows the flow of control for interacting with a spell checker service:

Figure 3. Interacting with a spell checker service.

The Spell Checker Client sample app shows how to interact with a spell checker service. The LatinIME input method editor in the Android Open Source Project also contains an example of spell checking.