10

मैं अपने एंड्रॉइड ऐप में Accessibility service को कार्यान्वित करना चाहता हूं जो निम्न चीज़ें कर सकता है:एंड्रॉइड में एक्सेसिबिलिटी का उपयोग करके नलियां कैसे सुनें और विचार कैसे प्राप्त करें?

=> किसी भी ऐप्स पर ऑनस्क्रीन टैप/क्लिक प्राप्त करें।

=> उस दृश्य को प्राप्त करें जिसे टैप/क्लिक किया गया था।

शुरू में मैंने सोचा कि यह क्योंकि सुरक्षा कारणों से ऐसा करने के लिए संभव नहीं होगा लेकिन, जबकि कुछ शोध कर रहा किसी एप्लिकेशन (Native clipboard) जो निम्नलिखित बातें कर सकता है भर में आया था:

=> नल EditText रों पर से पता लगाने कोई ऐप

=> उन EditText एस के लिए मूल्य (स्ट्रिंग) जोड़ें।

मैंने Google's talkback भी देखा जो आप जो कुछ भी टैप करते हैं उसे बोलता है। इसके लिए बोलने के लिए, इसे ऐप्स में दृश्य (टेक्स्ट प्राप्त करने के लिए) तक पहुंचने की आवश्यकता है।

ये ऐप्स स्पष्ट रूप से ऐसा करने के लिए 'एक्सेसिबिलिटी सेवाएं' का उपयोग करते हैं, लेकिन मैं जानना चाहता हूं कि मैं इसे कैसे कार्यान्वित कर सकता हूं?

मुझे ज्यादातर चीजों के लिए ट्यूटोरियल या सामान मिलते हैं जिन्हें मुझे हासिल करने की आवश्यकता होती है लेकिन मैं अपने ऐप के लिए एक्सेसिबिलिटी सेवा को लागू करने के लिए कुछ ढूंढने में संघर्ष कर रहा हूं। मैंने एंड्रॉइड आधिकारिक दस्तावेज का दौरा किया जो मेरे जैसे नौसिखिया के लिए बहुत तकनीकी है। (मैं शुरुआत में यूट्यूब, एसओ और ट्यूटोरियल वेबसाइटों से सीखना पसंद करता हूं)। यह भी अच्छा होगा अगर आप मुझे कुछ अन्य ट्यूटोरियल्स पर इंगित कर सकते हैं जो इन चीजों को शामिल करते हैं।

उत्तर

4

अभिगम्यता सेवाएं बहुत खराब तरीके से प्रलेखित हैं, लेकिन मैंने कुछ एक्सेसिबिलिटी सेवा बॉयलरप्लेट कोड बनाया है, जो स्टार्टर प्रोजेक्ट सेट करता है और बेस कॉलबैक लॉग करता है। मैं बाद में लिंक जोड़ूंगा, लेकिन यहां कुछ कोड है जो मुझे लगता है कि आप अपने विशिष्ट प्रश्नों के बारे में परवाह करते हैं। मचान, परियोजना की स्थापना की गई और इस तरह मैं रेपो के लिए छोड़ देता हूं।

नीचे ऑनबिलिटीवेंट कॉलबैक है। यह वह जगह है जहां आप विभिन्न प्रकार की घटनाओं के लिए सुनेंगे, और अधिकांश परिदृश्यों के लिए स्क्रीन सामग्री पर कब्जा करने के लिए सबसे सुविधाजनक स्थान। हालांकि, एक पहुंच सेवा के रूप में आपको घटनाओं की प्रतीक्षा भी नहीं करनी पड़ेगी। आप बस AsynTask को आसानी से उत्पन्न कर सकते हैं और किसी प्रकार के अंतराल पर इसे पकड़ सकते हैं।

public void onAccessibilityEvent(AccessibilityEvent event) { 
    CLog.d(event.toString()); 

    switch (event.getEventType()) { 
     //On Gesture events print out the entire view heirarchy! 
     case AccessibilityEvent.TYPE_GESTURE_DETECTION_START: 

CLog.d(A11yNodeInfo.wrap(getRootInActiveWindow()).toViewHeirarchy()); 
     case AccessibilityEvent.TYPE_VIEW_CLICKED: 
      CLog.d(event.getSource().toString()); 

     default: { 
      //The event has different types, for you, you want to look for "action clicked" 
      if (event.getSource() != null) { 
       CLog.d(A11yNodeInfo.wrap(event.getSource()).toViewHeirarchy()); 
      } 
     } 
    } 
} 

मैं इसके लिए एक बिट कॉन्फ़िगरेशन इंगित करूंगा, क्योंकि यह बहुत महत्वपूर्ण है। अभिगम्यता सेवाएं मैन्युअल फ़ाइल के माध्यम से आपकी सेवा से जुड़ी एक एक्सएमएल फाइल के माध्यम से सबसे अच्छी तरह से कॉन्फ़िगर की जाती हैं। इस फ़ाइल की सामग्री हैं:

<?xml version="1.0" encoding="utf-8"?> 
<accessibility-service 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:description="@string/accessibility_service_description" 
android:accessibilityEventTypes="typeAllMask" 
android:accessibilityFlags="flagReportViewIds" 
android:canRetrieveWindowContent="true" 
android:canRequestTouchExplorationMode="true" 
android:accessibilityFeedbackType="feedbackSpoken" 
android:notificationTimeout="100" 
android:settingsActivity="com.moba11y.basicaccessibilityservice.SettingsActivity" 
/> 

आप के लिए महत्वपूर्ण बिट्स हैं canRetrieveWindowContent="true" और `accessibilityEventTypes =" typeAllMask " '। मुझे पसंद है कि एक डिजाइन बिट, यह सुनिश्चित कर रहा है कि आप अपने इच्छित प्रकार के न्यूनतम सेट पर अपना हथियार लेना चाहते हैं। विभिन्न अभिगम्यता घटनाक्रम व्यापक रूप से अलग-अलग परिणामों की रिपोर्ट करते हैं। उदाहरण के लिए, कई घटनाएं GetSource() से "शून्य" लौटती हैं। यह आपको इसके लिए बहुत सारे फ़िल्टर जोड़ने, या शून्य सूचक अपवादों को जोखिम देने के लिए मजबूर करता है। यह काफी परेशान है।

अंतिम आवश्यकता आपको एक्सेसिबिलिटी क्रियाएं है। यह आपको क्लिक, लंबे क्लिक अनुकरण करने और संपादन योग्य टेक्स्ट व्यू में टेक्स्ट जोड़ने की अनुमति देता है। नीचे कोड है जो आपको ऐसा करने की अनुमति देता है।

public void onAccessibilityEvent(AccessibilityEvent event) { 
    AccessibilityNodeInfo source = event.getSource(); 
    if (source != null & event.getClassName().equals("android.widget.EditText")) { 
     Bundle arguments = new Bundle(); 
     arguments.putCharSequence(AccessibilityNodeInfo 
       .ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "some value"); 
     source.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); 
    } 
} 

https://github.com/chriscm2006/Android-Accessibility-Service-Boilerplate

संबंधित मुद्दे