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

1. परिचय

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

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

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

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

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

सुलभता सेवा तैयार करना

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

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

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

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

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

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

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

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

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

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

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

इस कोडलैब के लिए यह माना जाता है कि इसका इस्तेमाल किया जा रहा है:

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

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

2. सेट अप किया जा रहा है

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

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

उस रेपो का क्लोन बनाया जा सकता है जिसमें इस कोडलैब का कोड शामिल है:

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

&lt;accessibility-service&gt; एलिमेंट का इस्तेमाल करके, इस मेटाडेटा को परिभाषित किया गया है:

  1. इस सेवा के लिए सुझाव का प्रकार (यह कोडलैब feedbackजेनेरिक का इस्तेमाल करता है, जो एक अच्छा डिफ़ॉल्ट तरीका है).
  2. सेवा के लिए सुलभता फ़्लैग (यह कोडलैब डिफ़ॉल्ट फ़्लैग इस्तेमाल करता है).
  3. सेवा के लिए ज़रूरी सुविधाएं:
  4. स्वाइप करने के लिए, android:canPerformGestures को android:canPerformGestures पर सेट करें.
  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 का &#39;Play बटन&#39;, जिसका इस्तेमाल सेवा को लॉन्च करने के लिए किया गया हो को दबाएं. इससे वह ऐप्लिकेशन लॉन्च हो जाएगा जिस पर आप काम कर रहे हैं.

सेटिंग पर जाएं > सुलभता. आपके डिवाइस पर ग्लोबल ऐक्शन बार सर्विस इंस्टॉल हो.

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

ग्लोबल ऐक्शन बार सर्विस पर क्लिक करें और उसे चालू करें. आपको अनुमति से जुड़ा यह डायलॉग बॉक्स दिखेगा:

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

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

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

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 अनुमति है. इस अनुमति की मदद से, मौजूदा कॉन्टेंट के ऊपर वाली स्क्रीन पर सीधे ड्रॉ किया जा सकता है. इसके लिए, आपको अनुमतियों के मुश्किल प्रोसेस से भी नहीं गुज़रना पड़ता.

सुलभता सेवा की लाइफ़साइकल

सुलभता सेवा की लाइफ़साइकल को खास तौर पर सिस्टम मैनेज करता है. साथ ही, यह तय की गई सेवा की लाइफ़ साइकल का पालन करता है.

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

सेवा को चलाना

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

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

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

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

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

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

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() तरीके के आखिर में configurePowerButton() को जोड़ें:

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

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

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

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() तरीके में दिया गया है configureVolumeButton() जो तब ट्रिगर होता है, जब उपयोगकर्ता आवाज़ वाला बटन दबाता है. इस लिसनर के अंदर, configureVolumeButton() में AudioManager का इस्तेमाल होता है. इससे, स्ट्रीम की आवाज़ को अडजस्ट किया जा सकता है.

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

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

@Override
protected void onServiceConnected() {
   ...

   configureVolumeButton();
}

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

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

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

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() तरीके को configureScrollButton() से जोड़ें:

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() को configureScrollButton() में जोड़ें:

@Override
protected void onServiceConnected() {
   ...

   configureScrollButton();
}

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

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

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() को configureSwipeButton() में जोड़ें:

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

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

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

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

बधाई हो! आपने एक आसान, फ़ंक्शनल ऐक्सेसिबिलिटी सेवा बनाई है.

आप इस सेवा को कई तरीकों से बढ़ा सकते हैं. उदाहरण के लिए:

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

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

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

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