چارچوب غلط‌یابی املا

پلاتفرم Android چارچوب غلط‌یابی املایی ارائه می‌دهد که به شما امکان می‌دهد غلط‌یابی املایی را در برنامه‌تان پیاده‌سازی و به آن دسترسی پیدا کنید. این چارچوب یکی از میاناهای برنامه‌سازی کاربردی «سرویس نوشتار» است.

برای استفاده از چارچوب در برنامه‌تان، سرویس Android ایجاد می‌کنید که شیء جلسه غلط‌یاب املایی تولید می‌کند. براساس نوشتاری که ارائه می‌دهید، شیء جلسه پیشنهادهای املایی تولیدشده توسط غلط‌یاب املایی را برمی‌گرداند.

چرخه حیات غلط‌یابی املا

نمودار زیر چرخه حیات سرویس غلط‌یابی املا را نشان می‌دهد:

تصویری که چرخه حیات سرویس غلط‌یاب املایی را نشان می‌دهد
شکل ۱. چرخه حیات سرویس غلط‌یاب املایی.

برای شروع غلط‌یابی املایی، برنامه‌تان پیاده‌سازی سرویس غلط‌یاب املایی را آغاز می‌کند. کارخواه‌ها در برنامه شما، مانند فعالیت‌ها یا عناصر میانای کاربر تکی، جلسه غلط‌یابی املا را از سرویس درخواست می‌کنند، سپس از جلسه برای دریافت پیشنهادهای نوشتار استفاده می‌کنند. وقتی کارخواه عملیاتش را خاتمه می‌دهد، جلسه غلط‌یاب املایی‌اش را می‌بندد. درصورت لزوم، برنامه‌تان می‌تواند هرزمان که بخواهد سرویس غلط‌یابی املا را خاموش کند.

پیاده‌سازی سرویس غلط‌یاب املایی

برای استفاده از چارچوب غلط‌یاب املایی در برنامه‌تان، مؤلفه سرویس غلط‌یاب املایی را که شامل تعریف شیء جلسه است اضافه کنید. همچنین می‌توانید فعالیتی اختیاری به برنامه‌تان اضافه کنید که تنظیمات را کنترل می‌کند. فایل فراداده XML اضافه کنید که سرویس غلط‌یاب املایی را شرح دهد، و عناصر مناسب را به فایل مانیفست اضافه کنید.

کلاس‌های غلط‌یاب املایی

سرویس و شیء جلسه را با کلاس‌های زیر تعریف کنید:

  • زیرکلاس SpellCheckerService
    SpellCheckerService هم کلاس Service و هم میانای چارچوب غلط‌یاب املایی را پیاده‌سازی می‌کند. در زیرکلاس خود، روش زیر را پیاده‌سازی کنید:
    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 و EditText استفاده می‌کنند به‌طور خودکار از غلط‌یابی املایی بهره‌مند می‌شوند، زیرا TextView به‌طور خودکار از غلط‌یاب املایی استفاده می‌کند:

تصویری که نشان می‌دهد چگونه غلط‌یاب املایی به‌طور خودکار در EditText فعال می‌شود
شکل ۲. غلط‌یابی املایی در EditText.

بااین‌حال، ممکن است بخواهید در موارد دیگر مستقیماً با سرویس غلط‌یاب املایی تعامل داشته باشید. نمودار زیر جریان کنترل را برای تعامل با سرویس غلط‌یاب املایی نشان می‌دهد:

تصویری که نمودار تعامل با سرویس غلط‌یاب املایی را نشان می‌دهد
شکل ۳. تعامل با سرویس غلط‌یاب املایی.

ویرایشگر روش ورودی LatinIME در پروژه منبع باز Android حاوی نمونه‌ای از غلط‌یابی املایی است.