अभिगम्यता सेवाएं बहुत खराब तरीके से प्रलेखित हैं, लेकिन मैंने कुछ एक्सेसिबिलिटी सेवा बॉयलरप्लेट कोड बनाया है, जो स्टार्टर प्रोजेक्ट सेट करता है और बेस कॉलबैक लॉग करता है। मैं बाद में लिंक जोड़ूंगा, लेकिन यहां कुछ कोड है जो मुझे लगता है कि आप अपने विशिष्ट प्रश्नों के बारे में परवाह करते हैं। मचान, परियोजना की स्थापना की गई और इस तरह मैं रेपो के लिए छोड़ देता हूं।
नीचे ऑनबिलिटीवेंट कॉलबैक है। यह वह जगह है जहां आप विभिन्न प्रकार की घटनाओं के लिए सुनेंगे, और अधिकांश परिदृश्यों के लिए स्क्रीन सामग्री पर कब्जा करने के लिए सबसे सुविधाजनक स्थान। हालांकि, एक पहुंच सेवा के रूप में आपको घटनाओं की प्रतीक्षा भी नहीं करनी पड़ेगी। आप बस 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