Framework pemeriksa ejaan

Platform Android menawarkan framework pemeriksa ejaan yang memungkinkan Anda mengimplementasikan dan mengakses pemeriksaan ejaan di aplikasi Anda. Framework ini adalah salah satu Text Service API yang ditawarkan oleh platform Android.

Untuk menggunakan framework di aplikasi, Anda perlu membuat jenis layanan Android khusus yang menghasilkan objek session pemeriksa ejaan. Berdasarkan teks yang Anda berikan, objek session akan memberikan saran ejaan yang dibuat oleh pemeriksa ejaan.

Siklus proses pemeriksa ejaan

Diagram berikut menunjukkan siklus proses layanan pemeriksa ejaan:

Gambar 1. Siklus proses layanan pemeriksa ejaan.

Untuk memulai pemeriksaan ejaan, aplikasi Anda akan memulai dengan mengimplementasikan layanan pemeriksa ejaan. Klien di aplikasi Anda, seperti aktivitas atau elemen UI individual, kemudian meminta sesi pemeriksa ejaan dari layanan, lalu menggunakannya untuk mendapatkan saran teks. Saat klien menghentikan operasinya, sesi pemeriksa ejaannya akan ditutup. Jika perlu, aplikasi Anda dapat menonaktifkan layanan pemeriksa ejaan kapan pun.

Mengimplementasikan layanan pemeriksa ejaan

Untuk menggunakan framework pemeriksa ejaan di aplikasi Anda, tambahkan komponen layanan pemeriksa ejaan yang berisi definisi objek session. Anda juga dapat menambahkan aktivitas opsional yang mengontrol setelan ke aplikasi Anda. Anda juga harus menambahkan file metadata XML yang mendeskripsikan layanan pemeriksa ejaan, dan menambahkan elemen yang sesuai ke file manifes Anda.

Class pemeriksa ejaan

Tentukan objek layanan dan sesi dengan class berikut:

Subclass SpellCheckerService
SpellCheckerService mengimplementasikan class Service dan antarmuka framework pemeriksa ejaan. Dalam subclass, Anda harus mengimplementasikan metode berikut:
createSession()
Metode standar yang mengembalikan objek SpellCheckerService.Session ke klien yang ingin melakukan pemeriksaan ejaan.

Lihat aplikasi contoh Layanan Pemeriksa Ejaan untuk mempelajari implementasi class ini lebih lanjut.

Implementasi SpellCheckerService.Session
Objek yang diberikan kepada klien oleh layanan pemeriksa ejaan, agar dapat meneruskan teks ke pemeriksa ejaan dan menerima saran. Dalam class ini, Anda harus mengimplementasikan metode berikut:
onCreate()
Dipanggil oleh sistem untuk merespons createSession(). Dalam metode ini, Anda dapat melakukan inisialisasi objek SpellCheckerService.Session berdasarkan lokasi saat ini dan seterusnya.
onGetSentenceSuggestionsMultiple()
Melakukan pemeriksaan ejaan aktual. Metode ini menampilkan array SentenceSuggestionsInfo yang berisi saran untuk kalimat yang diteruskan.

Secara opsional, Anda dapat mengimplementasikan onCancel(), yang menangani permintaan untuk membatalkan pemeriksaan ejaan, onGetSuggestions(), yang menangani permintaan saran kosakata, atau onGetSuggestionsMultiple(), yang menangani permintaan saran kosakata dalam batch.

Lihat aplikasi contoh Klien Pemeriksa Ejaan untuk mempelajari implementasi class ini lebih lanjut.

Catatan: Anda harus mengimplementasikan semua aspek pemeriksaan ejaan sebagai asinkron dan aman terhadap thread. Pemeriksa ejaan dapat dipanggil secara bersamaan oleh beberapa thread berbeda yang berjalan pada inti (core) yang berbeda. SpellCheckerService dan SpellCheckerService.Session akan otomatis menanganinya.

Manifes dan metadata pemeriksa ejaan

Selain kode, Anda juga harus menyediakan file manifes dan metadata yang sesuai untuk pemeriksa ejaan.

File manifes mendefinisikan aplikasi, layanan, dan aktivitas untuk mengontrol setelan, seperti yang ditunjukkan dalam cuplikan berikut:

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

Perhatikan bahwa komponen yang ingin menggunakan layanan harus meminta izin BIND_TEXT_SERVICE untuk memastikan bahwa hanya sistem yang terikat ke layanan. Definisi layanan juga menentukan file metadata spellchecker.xml, yang dijelaskan di bagian berikutnya.

File metadata spellchecker.xml berisi XML berikut:

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

Metadata menentukan aktivitas yang digunakan pemeriksa ejaan untuk mengontrol setelan. Metadata juga mendefinisikan subjenis untuk pemeriksa ejaan; dalam hal ini, subjenis menentukan lokal yang dapat ditangani pemeriksa ejaan.

Akses layanan pemeriksa ejaan dari klien

Aplikasi yang menggunakan tampilan TextView otomatis dapat memanfaatkan pemeriksaan ejaan karena TextView otomatis menggunakan pemeriksa ejaan. Hal tersebut ditunjukkan dalam screenshot berikut ini:


Gambar 2. Pemeriksaan ejaan di TextView.

Namun, sebaiknya Anda juga berinteraksi langsung dengan layanan pemeriksa ejaan di kasus penggunaan lainnya. Diagram berikut menunjukkan alur kontrol untuk berinteraksi dengan layanan pemeriksa ejaan:

Gambar 3. Berinteraksi dengan layanan pemeriksa ejaan.

Anda dapat melihat contoh pemeriksaan ejaan di Editor metode input LatinIME di Proyek Open Source Android.