맞춤법 검사기 프레임워크

Android 플랫폼은 앱에서 맞춤법 검사를 구현하고 맞춤법 검사에 액세스할 수 있는 맞춤법 검사기 프레임워크를 제공합니다. 이 프레임워크는 텍스트 서비스 API 중 하나입니다.

앱에서 프레임워크를 사용하려면 맞춤법 검사기 세션 객체를 생성하는 Android 서비스를 만들어야 합니다. 제공된 텍스트에 따라 세션 객체는 맞춤법 검사기에서 생성된 맞춤법 추천을 반환합니다.

맞춤법 검사기 수명 주기

다음 다이어그램은 맞춤법 검사기 서비스의 수명 주기를 보여줍니다.

맞춤법 검사기 서비스의 수명 주기를 보여주는 이미지
그림 1. 맞춤법 검사기 서비스 수명 주기

맞춤법 검사를 시작하려면 앱에서 맞춤법 검사기 서비스의 구현을 시작합니다. 활동 또는 개별 UI 요소와 같은 앱의 클라이언트는 서비스에서 맞춤법 검사기 세션을 요청한 다음 이 세션을 사용하여 텍스트 추천을 받습니다. 클라이언트가 작업을 종료하면 맞춤법 검사기 세션이 닫힙니다. 필요한 경우 앱에서 언제든지 맞춤법 검사기 서비스를 종료할 수 있습니다.

맞춤법 검사기 서비스 구현

앱에서 맞춤법 검사기 프레임워크를 사용하려면 세션 객체 정의가 포함된 맞춤법 검사기 서비스 구성요소를 추가합니다. 설정을 제어하는 선택적 활동을 앱에 추가할 수도 있습니다. 맞춤법 검사기 서비스를 설명하는 XML 메타데이터 파일을 추가하고 매니페스트 파일에 적절한 요소를 추가합니다.

맞춤법 검사기 클래스

다음 클래스로 서비스 및 세션 객체를 정의합니다.

  • SpellCheckerService의 서브클래스
    SpellCheckerServiceService 클래스와 맞춤법 검사기 프레임워크 인터페이스를 모두 구현합니다. 서브클래스 내에서 다음 메서드를 구현합니다.
    createSession()
    맞춤법을 검사하려는 클라이언트에 SpellCheckerService.Session 객체를 반환하는 팩토리 메서드입니다.
  • SpellCheckerService.Session의 구현
    맞춤법 검사기 서비스가 클라이언트에 제공하는 객체로 맞춤법 검사기에 텍스트를 전달하고 추천을 받을 수 있습니다. 이 클래스 내에서 다음 메서드를 구현합니다.
    onCreate()
    createSession()에 대한 응답으로 시스템에서 호출합니다. 이 메서드에서 현재 언어 및 기타 세부정보에 기반하여 SpellCheckerService.Session 객체를 초기화할 수 있습니다.
    onGetSentenceSuggestionsMultiple()
    실제 맞춤법 검사를 실행합니다. 이 메서드는 전달된 문장 추천이 포함된 SentenceSuggestionsInfo 배열을 반환합니다.

    선택적으로 맞춤법 검사 취소 요청을 처리하는 onCancel(), 단어 제안 요청을 처리하는 onGetSuggestions(), 단어 제안 요청 배치를 처리하는 onGetSuggestionsMultiple()를 구현할 수 있습니다.

맞춤법 검사기 매니페스트 및 메타데이터

코드 외에도 적절한 매니페스트 파일과 맞춤법 검사기에 사용할 메타데이터 파일을 제공합니다.

매니페스트 파일은 다음 예와 같이 설정 제어를 위한 앱, 서비스, 활동을 정의합니다.

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

서비스를 사용하려는 구성요소는 BIND_TEXT_SERVICE 권한을 요청하여 시스템만 서비스에 바인딩되도록 해야 합니다. 서비스 정의는 spellchecker.xml 메타데이터 파일도 지정합니다. 이에 관한 내용은 다음 섹션에서 설명합니다.

메타데이터 파일 spellchecker.xml에는 다음 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>

메타데이터는 맞춤법 검사기가 설정을 제어하는 데 사용하는 활동을 지정합니다. 맞춤법 검사기의 하위유형도 정의합니다. 이 경우 하위유형은 맞춤법 검사기에서 처리할 수 있는 언어를 정의합니다.

클라이언트에서 맞춤법 검사기 서비스에 액세스

TextView가 자동으로 맞춤법 검사기를 사용하므로 TextViewEditText 뷰를 사용하는 앱은 자동으로 맞춤법 검사의 이점을 누릴 수 있습니다.

EditText에서 맞춤법 검사기가 자동으로 사용 설정되는 방식을 보여주는 이미지
그림 2. EditText에서 맞춤법 검사

그러나 다른 경우에는 맞춤법 검사기 서비스와 직접 상호작용하는 것이 좋습니다. 다음 다이어그램은 맞춤법 검사기 서비스와 상호작용하는 컨트롤의 흐름을 보여줍니다.

맞춤법 검사기 서비스와의 상호작용을 다이어그램으로 보여주는 이미지
그림 3. 맞춤법 검사기 서비스와의 상호작용

Android 오픈소스 프로젝트의 LatinIME 입력 방식 편집기(IME)에는 맞춤법 검사의 예가 포함되어 있습니다.