Framework de corretor ortográfico

A plataforma Android oferece um framework de corretor ortográfico que permite implementar e acessar a verificação ortográfica no seu aplicativo. O framework é uma das APIs de serviço de texto oferecidas pela plataforma Android.

Para usar o framework no seu app, crie um tipo especial de serviço Android que gere um objeto session do corretor ortográfico. Com base no texto fornecido, o objeto session retorna sugestões de ortografia geradas pelo corretor ortográfico.

Ciclo de vida do corretor ortográfico

O diagrama a seguir mostra o ciclo de vida do serviço do corretor ortográfico:

Figura 1. O ciclo de vida do serviço de corretor ortográfico.

Para iniciar a verificação ortográfica, seu app inicia a implementação do serviço de corretor ortográfico. Os clientes no seu app, como atividades ou elementos individuais da IU, solicitam ao serviço uma sessão do corretor ortográfico e a usam para ver sugestões para o texto. Ao encerrar a operação, o cliente encerra a sessão do corretor ortográfico. Se necessário, o app poderá encerrar o serviço do corretor ortográfico a qualquer momento.

Implementar um serviço de corretor ortográfico

Para usar o framework do corretor ortográfico no seu app, adicione um componente de serviço de corretor ortográfico, incluindo a definição do objeto session. Você também pode adicionar uma atividade opcional ao seu app que controle as configurações. É necessário, ainda, adicionar um arquivo de metadados XML que descreva o serviço de corretor ortográfico e adicione os elementos apropriados ao seu arquivo de manifesto.

Classes do corretor ortográfico

Defina o serviço e o objeto session com as seguintes classes:

Uma subclasse de SpellCheckerService
O SpellCheckerService implementa a classe Service e interface do framework do corretor ortográfico. Na sua subclasse, é necessário implementar o seguinte método:
createSession()
Um método de fábrica que retorna um objeto SpellCheckerService.Session para um cliente que queira fazer a verificação ortográfica.

Veja o app de exemplo Spell Checker Service para saber mais sobre como implementar essa classe.

Uma implementação de SpellCheckerService.Session
Um objeto que o serviço de corretor ortográfico fornece aos clientes para permitir que eles passem texto ao corretor ortográfico e recebam sugestões. Nessa classe, é necessário implementar os seguintes métodos:
onCreate()
Chamado pelo sistema em resposta a createSession(). Nesse método, você pode inicializar o objeto SpellCheckerService.Session com base na localidade atual e assim por diante.
onGetSentenceSuggestionsMultiple()
Faz a verificação ortográfica em si. Esse método retorna uma matriz de SentenceSuggestionsInfo contendo sugestões para as frases passadas para ele.

Opcionalmente, é possível implementar onCancel(), que processa solicitações para cancelar a verificação ortográfica, onGetSuggestions(), que processa uma solicitação de sugestão de palavras, ou onGetSuggestionsMultiple(), que processa lotes de solicitações de sugestão de palavras.

Veja o app de exemplo Spell Checker Client para saber mais sobre como implementar essa classe.

Observação: é necessário implementar todos os aspectos da verificação ortográfica como assíncronos e seguros para as linhas de execução. Um corretor ortográfico pode ser chamado simultaneamente por linhas de execução diferentes, executadas em núcleos diferentes. SpellCheckerService e SpellCheckerService.Session cuidam disso automaticamente.

Manifesto e metadados do corretor ortográfico

Além do código, é necessário fornecer o arquivo de manifesto adequado e um arquivo de metadados para o corretor ortográfico.

O arquivo de manifesto define o aplicativo, o serviço e a atividade para controlar as configurações, conforme mostrado no snippet a seguir:

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

Os componentes que quiserem usar o serviço precisam solicitar a permissão BIND_TEXT_SERVICE para garantir que somente o sistema seja vinculado ao serviço. A definição do serviço também especifica o arquivo de metadados spellchecker.xml, que é descrito na próxima seção.

O arquivo de metadados spellchecker.xml contém o seguinte 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>
    

Os metadados especificam a atividade que o corretor ortográfico usa para controlar as configurações. Também definem os subtipos do corretor ortográfico. Nesse caso, os subtipos definem as localidades que o corretor ortográfico pode manipular.

Acessar o serviço de corretor ortográfico de um cliente

Aplicativos que usam visualizações TextView são automaticamente beneficiados pela verificação ortográfica, porque o TextView usa o corretor automaticamente. As capturas de tela a seguir mostram isso:


Figura 2. Verificação ortográfica no TextView.

Contudo, você também pode querer interagir diretamente com o serviço de corretor ortográfico em outros casos. O diagrama a seguir mostra o fluxo de controle para interagir com um serviço de verificação ortográfica:

Figura 3. Interação com um serviço de corretor ortográfico.

O app de exemplo do Spell Checker Client mostra como interagir com um serviço de corretor ortográfico. O editor de método de entrada LatinIME do Android Open Source Project também contém um exemplo de verificação ortográfica.