Android के लिए सुलभता सेवा डेवलप करना

1. परिचय

ऐक्सेसिबिलिटी सेवाएं, Android फ़्रेमवर्क की एक सुविधा है. इसे Android डिवाइसों पर इंस्टॉल किए गए ऐप्लिकेशन की ओर से, उपयोगकर्ता को नेविगेशन के बारे में जानकारी देने के लिए डिज़ाइन किया गया है. सुलभता सेवा, ऐप्लिकेशन की ओर से उपयोगकर्ता से कम्यूनिकेट कर सकती है. उदाहरण के लिए, टेक्स्ट को बोलकर सुनाना या जब कोई उपयोगकर्ता स्क्रीन के किसी ज़रूरी हिस्से पर कर्सर घुमा रहा हो, तो हैप्टिक फ़ीडबैक देना. इस कोडलैब में, सुलभता सेवा बनाने का बहुत ही आसान तरीका बताया गया है.

सुलभता सेवा क्या होती है?

सुलभता सेवा, दिव्यांग लोगों को Android डिवाइसों और ऐप्लिकेशन का इस्तेमाल करने में मदद करती है. यह लंबे समय से उपलब्ध एक खास सेवा है. इससे लोगों को स्क्रीन पर मौजूद जानकारी को प्रोसेस करने में मदद मिलती है. साथ ही, वे डिवाइस के साथ बेहतर तरीके से इंटरैक्ट कर पाते हैं.

सुलभता सेवाओं के सामान्य उदाहरण

  • बटन से ऐक्सेस करें: इस सुविधा की मदद से, हिलने-डुलने में परेशानी होने वाले Android उपयोगकर्ता, एक या उससे ज़्यादा बटन का इस्तेमाल करके डिवाइसों को कंट्रोल कर सकते हैं.
  • वॉइस ऐक्सेस (बीटा वर्शन): इससे Android का इस्तेमाल करने वाले ऐसे लोग बोलकर दिए गए निर्देशों की मदद से डिवाइस को कंट्रोल कर सकते हैं जिन्हें चलने-फिरने में परेशानी होती है.
  • Talkback: यह एक स्क्रीन रीडर है. इसका इस्तेमाल आम तौर पर, दृष्टि बाधित या अंधे लोग करते हैं.

सुलभता सेवा बनाना

Google, Android का इस्तेमाल करने वाले लोगों के लिए, ऐक्सेस करने का तरीका बदलने की सुविधा, बोलकर फ़ोन इस्तेमाल करने की सुविधा, और TalkBack जैसी सेवाएं उपलब्ध कराता है. हालांकि, ये सेवाएं सभी दिव्यांग लोगों की मदद नहीं कर सकतीं. दिव्यांग लोगों की ज़रूरतें अलग-अलग होती हैं. इसलिए, Android के एपीआई, ऐक्सेसिबिलिटी सेवाएं बनाने के लिए खुले हैं. साथ ही, डेवलपर के पास ऐक्सेसिबिलिटी सेवाएं बनाने और उन्हें Play Store के ज़रिए डिस्ट्रिब्यूट करने की आज़ादी है.

आपको क्या बनाना है

इस कोडलैब में, आपको एक ऐसी सामान्य सेवा डेवलप करनी है जो सुलभता एपीआई का इस्तेमाल करके कुछ काम की सुविधाएं उपलब्ध कराती है. अगर आपको Android ऐप्लिकेशन बनाना आता है, तो इस तरह की सेवा डेवलप की जा सकती है.

Accessibility API बहुत काम का है: आपको जिस सेवा को बनाना है उसका कोड सिर्फ़ चार फ़ाइलों में मौजूद है. साथ ही, इसमें कोड की सिर्फ़ 200 लाइनें इस्तेमाल की गई हैं!

असली उपयोगकर्ता

आपको एक काल्पनिक उपयोगकर्ता के लिए सेवा बनानी होगी. उसकी ये विशेषताएं हैं:

  • उपयोगकर्ता को डिवाइस के साइड बटन दबाने में परेशानी हो रही हो.
  • उपयोगकर्ता को स्क्रोल करने या स्वाइप करने में समस्या आ रही है.

सेवा की जानकारी

आपकी सेवा, स्क्रीन पर ग्लोबल ऐक्शन बार को ओवरले करेगी. उपयोगकर्ता इस बार पर मौजूद बटन को छूकर ये कार्रवाइयां कर सकता है:

  1. फ़ोन के साइड में मौजूद पावर बटन तक पहुंचे बिना, डिवाइस को बंद करें.
  2. फ़ोन के किनारे पर मौजूद आवाज़ कम या ज़्यादा करने वाले बटन को छुए बिना, आवाज़ कम या ज़्यादा करें.
  3. स्क्रोल किए बिना स्क्रोल करने की कार्रवाइयां करें.
  4. स्वाइप करने वाले हाथ के जेस्चर का इस्तेमाल किए बिना स्वाइप करें.

आपको इन चीज़ों की ज़रूरत होगी

इस कोडलैब में, यह माना गया है कि आपको इनका इस्तेमाल करना होगा:

  1. Android Studio का इस्तेमाल करने वाला कंप्यूटर.
  2. सामान्य शेल कमांड चलाने के लिए एक टर्मिनल.
  3. Android 7.0 (Nougat) पर काम करने वाला ऐसा डिवाइस जो उस कंप्यूटर से कनेक्ट हो जिस पर आपको डेवलपमेंट करना है.

आइए, शुरू करें!

2. सेट अप करना

टर्मिनल का इस्तेमाल करके, एक ऐसी डायरेक्ट्री बनाएं जिसमें आपको काम करना है. इस डायरेक्ट्री में जाएं.

कोड डाउनलोड करें

इस कोडलैब के कोड वाली repo को क्लोन किया जा सकता है:

git clone https://github.com/android/codelab-android-accessibility.git

इस रेपो में कई Android Studio प्रोजेक्ट शामिल हैं. Android Studio का इस्तेमाल करके, GlobalActionBarService खोलें.

Studio आइकॉन पर क्लिक करके, Android Studio लॉन्च करें:

Android Studio को लॉन्च करने के लिए इस्तेमाल किया गया लोगो.

प्रोजेक्ट इंपोर्ट करें (Eclipse ADT, Gradle वगैरह) विकल्प चुनें:

Android Studio की वेलकम स्क्रीन.

उस जगह पर जाएं जहां आपने सोर्स को क्लोन किया था. इसके बाद, GlobalActionBarService को चुनें.

इसके बाद, टर्मिनल का इस्तेमाल करके रूट डायरेक्ट्री में जाएं.

3. स्टार्टिंग कोड के बारे में जानकारी

आपने जो प्रोजेक्ट खोला है उसे एक्सप्लोर करें.

सुलभता सेवा के लिए, बुनियादी ढांचा पहले ही बना दिया गया है. इस कोडलैब में लिखा जाने वाला सारा कोड, इन चार फ़ाइलों तक ही सीमित रहेगा:

  1. app/src/main/AndroidManifest.xml
  2. app/src/main/res/layout/action_bar.xml
  3. app/src/main/res/xml/global_action_bar_service.xml
  4. app/src/main/java/com/example/android/globalactionbarservice/GlobalActionBarService.java

यहां हर फ़ाइल के कॉन्टेंट के बारे में जानकारी दी गई है.

AndroidManifest.xml

मेनिफ़ेस्ट में सुलभता सेवा के बारे में यह जानकारी दी गई है:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.android.globalactionbarservice">

   <application>
       <service
           android:name=".GlobalActionBarService"
           android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
           android:exported="true">
           <intent-filter>
               <action android:name="android.accessibilityservice.AccessibilityService" />
           </intent-filter>
           <meta-data
               android:name="android.accessibilityservice"
               android:resource="@xml/global_action_bar_service" />
       </service>
   </application>
</manifest>

AndroidManifest.xml में, ये तीन ज़रूरी आइटम तय किए गए हैं:

  1. आसान तरीका सेवा से आबद्ध करने की अनुमति:
<service
    ...
    android:permission = "android.permission.BIND_ACCESSIBILITY_SERVICE">
    ...             
</service>
  1. AccessibilityService इंटेंट:
<intent-filter>
   <action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
  1. उस फ़ाइल की जगह की जानकारी जिसमें बनाई जा रही सेवा का मेटाडेटा मौजूद है:
<meta-data
       ...
       android:resource="@xml/global_action_bar_service" />
</service>

global_action_bar_service.xml

इस फ़ाइल में सेवा के लिए मेटाडेटा होता है.

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
   android:accessibilityFeedbackType="feedbackGeneric"
   android:accessibilityFlags="flagDefault"
   android:canPerformGestures="true"
   android:canRetrieveWindowContent="true" />

<accessibility-service> एलिमेंट का इस्तेमाल करके, यहां दिया गया मेटाडेटा तय किया गया है:

  1. इस सेवा के लिए सुझाव/राय देने या शिकायत करने का टाइप. इस कोडलैब में feedbackGeneric का इस्तेमाल किया गया है, जो एक अच्छा डिफ़ॉल्ट टाइप है.
  2. सेवा के लिए सुलभता फ़्लैग. इस कोडलैब में डिफ़ॉल्ट फ़्लैग का इस्तेमाल किया गया है.
  3. सेवा के लिए ज़रूरी सुविधाएं:
  4. स्वाइप करने के लिए, android:canPerformGestures को true पर सेट किया जाता है.
  5. विंडो का कॉन्टेंट वापस पाने के लिए, android:canRetrieveWindowContent को true पर सेट किया जाता है.

GlobalActionBarService.java

सुलभता सेवा के लिए ज़्यादातर कोड, GlobalActionBarService.java में मौजूद होता है. शुरुआत में, फ़ाइल में सुलभता सेवा के लिए ज़रूरी कोड होता है:

  1. यह एक ऐसी क्लास है जो AccessibilityService को बढ़ाती है.
  2. कुछ ज़रूरी तरीके जिन्हें बदला गया है. इस कोडलैब में इन्हें खाली छोड़ दिया गया है.
public class GlobalActionBarService extends AccessibilityService {

   @Override
   public void onAccessibilityEvent(AccessibilityEvent event) {

   }

   @Override
   public void onInterrupt() {

   }
}

कोड लैब के दौरान, आपको इस फ़ाइल में कोड जोड़ना होगा.

action_bar.xml

यह सेवा, चार बटन वाला यूज़र इंटरफ़ेस (यूआई) दिखाती है. साथ ही, action_bar.xml लेआउट फ़ाइल में उन बटन को दिखाने के लिए मार्कअप शामिल होता है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="horizontal"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
</LinearLayout>

इस फ़ाइल में फ़िलहाल एक खाली LinearLayout है. कोड लैब के दौरान, आपको बटन के लिए मार्कअप जोड़ना होगा.

ऐप्लिकेशन लॉन्च करना

पक्का करें कि कोई डिवाइस आपके कंप्यूटर से कनेक्ट हो. स्क्रीन पर सबसे ऊपर मौजूद मेन्यू बार में जाकर, हरे रंग के चलाएं आइकॉन Android Studio में मौजूद Play बटन का इस्तेमाल, सेवा को लॉन्च करने के लिए किया जाता है को दबाएं. इससे वह ऐप्लिकेशन लॉन्च हो जाएगा जिस पर काम किया जा रहा है.

सेटिंग > सुलभता पर जाएं. आपके डिवाइस पर Global Action Bar Service इंस्टॉल हो.

सुलभता सेटिंग वाली स्क्रीन

Global Action Bar Service पर क्लिक करें और इसे चालू करें. आपको अनुमति वाला यह डायलॉग दिखेगा:

सुलभता सेवा की अनुमति वाला डायलॉग बॉक्स.

सुलभता सेवा, उपयोगकर्ता की कार्रवाइयों को देखने, विंडो कॉन्टेंट को वापस पाने, और उपयोगकर्ता की ओर से जेस्चर करने की अनुमति का अनुरोध करती है! तीसरे पक्ष की सुलभता सेवा का इस्तेमाल करते समय, पक्का करें कि आपको उस सेवा पर भरोसा हो!

इस सेवा को चलाने से कोई फ़र्क़ नहीं पड़ता, क्योंकि हमने अब तक कोई सुविधा नहीं जोड़ी है. चलिए, अब हम ऐसा करना शुरू करते हैं.

4. बटन बनाना

res/layout में जाकर, action_bar.xml खोलें. मौजूदा समय में खाली LinearLayout में मार्कअप जोड़ें:

<LinearLayout ...>
    <Button
        android:id="@+id/power"
        android:text="@string/power"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/volume_up"
        android:text="@string/volume"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/scroll"
        android:text="@string/scroll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/swipe"
        android:text="@string/swipe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

इससे बटन बनते हैं. उपयोगकर्ता इन बटन को दबाकर, डिवाइस पर कार्रवाइयां ट्रिगर करेगा.

GlobalActionBarService.java खोलें और ऐक्शन बार के लेआउट को सेव करने के लिए एक वैरिएबल जोड़ें:

public class GlobalActionBarService extends AccessibilityService {
    FrameLayout mLayout;
    ...
}

अब onServiceStarted() तरीका जोड़ें:

public class GlobalActionBarService extends AccessibilityService {
   FrameLayout mLayout;

   @Override
   protected void onServiceConnected() {
       // Create an overlay and display the action bar
       WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
       mLayout = new FrameLayout(this);
       WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
       lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
       lp.format = PixelFormat.TRANSLUCENT;
       lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
       lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
       lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
       lp.gravity = Gravity.TOP;
       LayoutInflater inflater = LayoutInflater.from(this);
       inflater.inflate(R.layout.action_bar, mLayout);
       wm.addView(mLayout, lp);
   }
}

यह कोड लेआउट को बड़ा करता है और स्क्रीन पर सबसे ऊपर ऐक्शन बार जोड़ता है.

सेवा कनेक्ट होने पर, onServiceConnected() तरीका काम करता है. फ़िलहाल, सुलभता सेवा के पास काम करने के लिए ज़रूरी सभी अनुमतियां हैं. यहां आपको WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY अनुमति का इस्तेमाल करना होगा. इस अनुमति से, मौजूदा कॉन्टेंट के ऊपर सीधे स्क्रीन पर ड्रॉ किया जा सकता है. इसके लिए, आपको अनुमति पाने की मुश्किल प्रोसेस से नहीं गुज़रना पड़ता.

Accessibility Service का लाइफ़साइकल

ऐक्सेसिबिलिटी सेवा की लाइफ़साइकल को सिर्फ़ सिस्टम मैनेज करता है. साथ ही, यह सेवा की तय की गई लाइफ़साइकल के हिसाब से काम करती है.

  • ऐक्सेसिबिलिटी सेवा तब शुरू होती है, जब उपयोगकर्ता डिवाइस की सेटिंग में जाकर इस सेवा को चालू करता है.
  • सिस्टम के किसी सेवा से जुड़ने के बाद, यह onServiceConnected() को कॉल करता है. इस तरीके को उन सेवाओं से बदला जा सकता है जिन्हें बाइंडिंग के बाद सेटअप करना है.
  • सुलभता सेवा तब बंद होती है, जब उपयोगकर्ता डिवाइस की सेटिंग में जाकर उसे बंद कर देता है या जब वह disableSelf() को कॉल करता है.

सेवा को चालू रखना

Android Studio का इस्तेमाल करके सेवा लॉन्च करने से पहले, आपको यह पक्का करना होगा कि रन सेटिंग सही तरीके से कॉन्फ़िगर की गई हों.

अपने रन कॉन्फ़िगरेशन में बदलाव करें. इसके लिए, सबसे ऊपर मौजूद मेन्यू में जाकर 'रन करें' चुनें और फिर 'कॉन्फ़िगरेशन में बदलाव करें' पर जाएं. इसके बाद, ड्रॉपडाउन का इस्तेमाल करके, लॉन्च करने के विकल्प को "डिफ़ॉल्ट गतिविधि" से "कुछ नहीं" में बदलें.

Android Studio का इस्तेमाल करके कोई सेवा लॉन्च करने के लिए, रन सेटिंग कॉन्फ़िगर करने के लिए ड्रॉप-डाउन करें.

अब Android Studio का इस्तेमाल करके, इस सेवा को लॉन्च किया जा सकता है.

स्क्रीन पर सबसे ऊपर मौजूद मेन्यू बार में जाकर, हरे रंग के चलाएं आइकॉन Android Studio में मौजूद Play बटन का इस्तेमाल, सेवा को लॉन्च करने के लिए किया जाता है को दबाएं. इसके बाद, सेटिंग > सुलभता पर जाएं और ग्लोबल ऐक्शन बार सेवा चालू करें.

आपको स्क्रीन पर दिख रहे कॉन्टेंट के ऊपर, सेवा के यूज़र इंटरफ़ेस (यूआई) वाले चार बटन दिखेंगे.

overlay.png

अब आपको इन चार बटन में फ़ंक्शन जोड़ने हैं, ताकि उपयोगकर्ता इन्हें छूकर काम की कार्रवाइयां कर सके.

5. पावर बटन को कॉन्फ़िगर करना

configurePowerButton() में configurePowerButton() तरीका जोड़ें:

private void configurePowerButton() {
   Button powerButton = (Button) mLayout.findViewById(R.id.power);
   powerButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
           performGlobalAction(GLOBAL_ACTION_POWER_DIALOG);
       }
   });
}

पावर बटन मेन्यू को ऐक्सेस करने के लिए, configurePowerButton(), performGlobalAction() तरीके का इस्तेमाल करता है. यह तरीका, AccessibilityService से मिलता है. आपने अभी जो कोड जोड़ा है वह आसान है: बटन पर क्लिक करने से onClickListener() ट्रिगर होता है. यह performGlobalAction(GLOBAL_ACTION_POWER_DIALOG) को कॉल करता है और उपयोगकर्ता को पावर डायलॉग दिखाता है.

ध्यान दें कि ग्लोबल ऐक्शन, किसी भी व्यू से नहीं जुड़े होते हैं. बैक बटन, होम बटन, और हाल ही के बटन दबाना, ग्लोबल ऐक्शन के अन्य उदाहरण हैं.

अब configurePowerButton() को onServiceConnected() तरीके के आखिर में जोड़ें:

@Override
protected void onServiceConnected() {
   ...
   configurePowerButton();
}

स्क्रीन पर सबसे ऊपर मौजूद मेन्यू बार में जाकर, हरे रंग के चलाएं आइकॉन Android Studio में मौजूद Play बटन का इस्तेमाल, सेवा को लॉन्च करने के लिए किया जाता है को दबाएं. इसके बाद, सेटिंग > सुलभता पर जाएं और ग्लोबल ऐक्शन बार सेवा शुरू करें.

पावर डायलॉग बॉक्स दिखाने के लिए, पावर बटन दबाएं.

6. आवाज़ कम या ज़्यादा करने वाले बटन को कॉन्फ़िगर करना

configureVolumeButton() में configureVolumeButton() तरीका जोड़ें:

private void configureVolumeButton() {
   Button volumeUpButton = (Button) mLayout.findViewById(R.id.volume_up);
   volumeUpButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
           AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
           audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                   AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
       }
   });
}

configureVolumeButton() मेथड, onClickListener() जोड़ता है. यह तब ट्रिगर होता है, जब उपयोगकर्ता वॉल्यूम बटन दबाता है. इस लिसनर के अंदर, configureVolumeButton(), स्ट्रीम की आवाज़ को कम या ज़्यादा करने के लिए AudioManager का इस्तेमाल करता है.

ध्यान दें कि कोई भी व्यक्ति वॉल्यूम को कंट्रोल कर सकता है. इसके लिए, आपको ऐक्सेसिबिलिटी सेवा का इस्तेमाल करने की ज़रूरत नहीं है.

अब onServiceConnected() तरीके के आखिर में configureVolumeButton() जोड़ें:

@Override
protected void onServiceConnected() {
   ...

   configureVolumeButton();
}

स्क्रीन पर सबसे ऊपर मौजूद मेन्यू बार में जाकर, हरे रंग के चलाएं आइकॉन Android Studio में मौजूद Play बटन का इस्तेमाल, सेवा को लॉन्च करने के लिए किया जाता है को दबाएं. इसके बाद, सेटिंग > सुलभता पर जाएं और ग्लोबल ऐक्शन बार सेवा शुरू करें.

आवाज़ कम या ज़्यादा करने के लिए, आवाज़ कम या ज़्यादा करने का बटन दबाएं.

डिवाइस के किनारे मौजूद वॉल्यूम कंट्रोल तक न पहुंच पाने वाला काल्पनिक उपयोगकर्ता, अब वॉल्यूम बदलने (बढ़ाने) के लिए ग्लोबल ऐक्शन बार सेवा का इस्तेमाल कर सकता है.

7. स्क्रोल बटन को कॉन्फ़िगर करना

इस सेक्शन में, दो तरीकों को कोड करने के बारे में बताया गया है. पहले तरीके से स्क्रोल किए जा सकने वाले नोड का पता चलता है. वहीं, दूसरे तरीके से उपयोगकर्ता की ओर से स्क्रोल करने की कार्रवाई की जाती है.

findScrollableNode में findScrollableNode मेथड जोड़ें:

private AccessibilityNodeInfo findScrollableNode(AccessibilityNodeInfo root) {
   Deque<AccessibilityNodeInfo> deque = new ArrayDeque<>();
   deque.add(root);
   while (!deque.isEmpty()) {
       AccessibilityNodeInfo node = deque.removeFirst();
       if (node.getActionList().contains(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD)) {
           return node;
       }
       for (int i = 0; i < node.getChildCount(); i++) {
           deque.addLast(node.getChild(i));
       }
   }
   return null;
}

सुलभता सेवा के पास स्क्रीन पर मौजूद असल व्यू का ऐक्सेस नहीं होता. इसके बजाय, यह स्क्रीन पर मौजूद कॉन्टेंट को AccessibilityNodeInfo ऑब्जेक्ट से बने ट्री के तौर पर देखता है. इन ऑब्जेक्ट में, उस व्यू के बारे में जानकारी होती है जिसे ये ऑब्जेक्ट दिखाते हैं. जैसे, व्यू की जगह, व्यू से जुड़ा कोई टेक्स्ट, पहुंच बढ़ाने के लिए जोड़ा गया मेटाडेटा, व्यू के साथ काम करने वाली कार्रवाइयां वगैरह. findScrollableNode() तरीका, इस ट्री के सभी नोड को क्रम से देखता है. यह प्रोसेस, रूट नोड से शुरू होती है. अगर इसे स्क्रोल किया जा सकने वाला कोई नोड मिलता है (जैसे, ऐसा नोड जो AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD कार्रवाई) के साथ काम करता है), तो यह उसे दिखाता है. ऐसा न होने पर, यह शून्य दिखाता है.

अब configureScrollButton() तरीके को GlobalActionBarService.java में जोड़ें:

private void configureScrollButton() {
   Button scrollButton = (Button) mLayout.findViewById(R.id.scroll);
   scrollButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
           AccessibilityNodeInfo scrollable = findScrollableNode(getRootInActiveWindow());
           if (scrollable != null) {
               scrollable.performAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId());
           }
       }
   });
}

यह तरीका, onClickListener() बनाता है. यह तब ट्रिगर होता है, जब स्क्रोल बटन पर क्लिक किया जाता है. यह स्क्रोल किए जा सकने वाले नोड को ढूंढता है. अगर नोड मिल जाता है, तो स्क्रोल करने की कार्रवाई करता है.

अब configureScrollButton() को onServiceConnected() में जोड़ें:

@Override
protected void onServiceConnected() {
   ...

   configureScrollButton();
}

स्क्रीन पर सबसे ऊपर मौजूद मेन्यू बार में जाकर, हरे रंग के चलाएं आइकॉन Android Studio में मौजूद Play बटन का इस्तेमाल, सेवा को लॉन्च करने के लिए किया जाता है को दबाएं. इसके बाद, सेटिंग > सुलभता पर जाएं और ग्लोबल ऐक्शन बार सेवा शुरू करें.

सेटिंग > सुलभता पर जाने के लिए, 'वापस जाएं' बटन दबाएं. सुलभता सेटिंग की गतिविधि में मौजूद आइटम को स्क्रोल किया जा सकता है. स्क्रोल बटन को छूने पर, स्क्रोल करने की कार्रवाई होती है. हमारा काल्पनिक उपयोगकर्ता, स्क्रोल करने की कार्रवाइयां आसानी से नहीं कर पा रहा है. अब वह स्क्रोल बटन का इस्तेमाल करके, आइटम की सूची को स्क्रोल कर सकता है.

8. स्वाइप बटन को कॉन्फ़िगर करना

configureSwipeButton() में configureSwipeButton() तरीका जोड़ें:

private void configureSwipeButton() {
   Button swipeButton = (Button) mLayout.findViewById(R.id.swipe);
   swipeButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
           Path swipePath = new Path();
           swipePath.moveTo(1000, 1000);
           swipePath.lineTo(100, 1000);
           GestureDescription.Builder gestureBuilder = new GestureDescription.Builder();
           gestureBuilder.addStroke(new GestureDescription.StrokeDescription(swipePath, 0, 500));
           dispatchGesture(gestureBuilder.build(), null, null);
       }
   });
}

configureSwipeButton() मेथड, N में जोड़े गए नए एपीआई का इस्तेमाल करता है. यह एपीआई, उपयोगकर्ता की ओर से जेस्चर करता है. यह कोड, GestureDescription ऑब्जेक्ट का इस्तेमाल करके, जेस्चर के लिए पाथ तय करता है. इस कोडलैब में, हार्डकोड की गई वैल्यू का इस्तेमाल किया जाता है. इसके बाद, यह AccessibilityService dispatchGesture() तरीके का इस्तेमाल करके, उपयोगकर्ता की ओर से स्वाइप जेस्चर भेजता है.

अब configureSwipeButton() को onServiceConnected() में जोड़ें:

@Override
protected void onServiceConnected() {
   ...
   configureSwipeButton();
}

स्क्रीन पर सबसे ऊपर मौजूद मेन्यू बार में जाकर, हरे रंग के चलाएं आइकॉन Android Studio में मौजूद Play बटन का इस्तेमाल, सेवा को लॉन्च करने के लिए किया जाता है को दबाएं. इसके बाद, सेटिंग > सुलभता पर जाएं और ग्लोबल ऐक्शन बार सेवा शुरू करें.

स्वाइप करने की सुविधा की जांच करने का सबसे आसान तरीका यह है कि अपने फ़ोन पर इंस्टॉल किया गया Maps ऐप्लिकेशन खोलें. मैप लोड होने के बाद, स्वाइप करें बटन को छूने पर स्क्रीन दाईं ओर स्वाइप हो जाती है.

9. खास जानकारी

बधाई हो! आपने सुलभता से जुड़ी एक आसान और काम की सेवा बनाई है.

इस सेवा की अवधि को अलग-अलग तरीकों से बढ़ाया जा सकता है. उदाहरण के लिए:

  1. ऐक्शन बार को मूव किया जा सकता है. फ़िलहाल, यह स्क्रीन पर सबसे ऊपर दिखता है.
  2. उपयोगकर्ता को आवाज़ बढ़ाने और कम करने, दोनों की अनुमति दें.
  3. उपयोगकर्ता को बाईं और दाईं, दोनों ओर स्वाइप करने की अनुमति दें.
  4. ऐसी अतिरिक्त जेस्चर के लिए सहायता जोड़ें जिनके लिए ऐक्शन बार जवाब दे सकता है.

इस कोडलैब में, सुलभता एपीआई की ओर से उपलब्ध कराई गई सुविधाओं के सिर्फ़ एक छोटे सबसेट के बारे में बताया गया है. एपीआई में ये चीज़ें भी शामिल हैं (पूरी सूची नहीं दी गई है):

  • एक से ज़्यादा विंडो की सुविधा.
  • AccessibilityEvent के लिए सहायता. यूज़र इंटरफ़ेस (यूआई) में बदलाव होने पर, AccessibilityEvent ऑब्जेक्ट का इस्तेमाल करके सुलभता सेवाओं को इन बदलावों के बारे में सूचना दी जाती है. इसके बाद, सेवा यूज़र इंटरफ़ेस (यूआई) में हुए बदलावों के हिसाब से जवाब दे सकती है.
  • ज़ूम करने की सुविधा को कंट्रोल करने की क्षमता.

इस कोडलैब से, आपको सुलभता सेवा लिखने के बारे में जानकारी मिलेगी. अगर आपको किसी ऐसे व्यक्ति के बारे में पता है जिसे सुलभता से जुड़ी कुछ समस्याएं आ रही हैं और आपको उन्हें ठीक करना है, तो अब उस व्यक्ति की मदद करने के लिए कोई सेवा बनाई जा सकती है.