2011-02-25 9 views
23

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

मेरे समस्या यह है कि मैं केवल उन्हीं परिवर्तनों और अतिरिक्त आउटपुट चाहते हैं तो उपयोगकर्ता TalkBack को सक्रिय किया गया है।

वहाँ किसी भी तरह से अगर यह होता है पता करने के लिए है? मुझे सीधे TalkBack सेटिंग्स तक पहुंचने के लिए कुछ भी विशिष्ट नहीं मिला, लेकिन मुझे उम्मीद थी कि सामान्य फोन सेटिंग्स तक पहुंचने का कुछ रूप था जो मुझे बता सकता था कि मुझे क्या चाहिए।

सादर और अग्रिम धन्यवाद।

उत्तर

2

उदाहरण के लिए, isScreenReaderActive()HomeLauncher.java file in the Eyes-Free shell application (groups thread के माध्यम से) देखें।

सारांश में: यदि आप उद्देश्य के साथ सभी स्क्रीन रीडर का पता लगाने के लिए, तो अगर यह सक्रिय है देखने के लिए प्रत्येक की स्थिति प्रदाता क्वेरी।

यदि आप वास्तव में इसे केवल TalkBack पर सीमित करना चाहते हैं, तो आप से प्रत्येक परिणाम के लिए ResolveInfo.serviceInfo.packageName को जांचने का प्रयास कर सकते हैं यह देखने के लिए कि यह TalkBack पैकेज से मेल खाता है या नहीं।

+0

बात करने के लिए मैं सभी सेवाओं के माध्यम से जा रहा है और यदि TalkBack के एक सक्रिय था समाप्त हो गया टैप करते हैं, लेकिन अपने समाधान बहुत बेहतर है, धन्यवाद। हालांकि, मुझे एक क्रैक किए गए रोम के साथ समस्या थी। कोई सेवाएं वापस नहीं की जा रही थीं। –

+0

माइक, मैंने जेली बीन में यह कोशिश की है और यह काम नहीं कर रहा है ... कर्सर खाली लगता है। क्या आपको जेली बीन में ऐसा करने का कोई विचार है? मैंने एक नया प्रश्न बनाया: http://stackoverflow.com/questions/11831666/how-to-check-if-talkback-is-active-in-jellybean – pandre

47

ऐसा करने का सुझाया गया तरीका पहुँच सेवाओं के सक्षम राज्य के लिए AccessibilityManager क्वेरी करने के लिए है।

AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE); 
boolean isAccessibilityEnabled = am.isEnabled(); 
boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled(); 
+8

यदि टॉकबैक सेवा निलंबित कर दी गई है (इशारा शॉर्टकट का उपयोग करके), अभिगम्यता प्रबंधक अपने सक्षम राज्य को 'अक्षम' में नहीं बदलेगा। बहुत छोटा किनारा मामला, मुझे लगता है, और तकनीकी रूप से यह _is_ अभी भी सक्षम है, लेकिन यह आज मुझे ट्राइप किया। – ataulm

+0

यदि आप नेक्सस प्लेयर पर टॉकबैक सेवा का उपयोग करते हैं, तो क्या 'isTouchExplorationEnabled() 'अभी भी सच है? – ataulm

+2

अपने स्वयं के प्रश्न का उत्तर देने के लिए, नेक्सस प्लेयर (कम से कम लॉलीपॉप पर) पर 'टच एक्सप्लोरेशन' उपलब्ध है और यदि यह चेक किया गया है तो यह सच हो जाएगा। – ataulm

3

नोवाडा ने accessibilitools नामक एक लाइब्रेरी जारी की है जो यह जांच करता है। यह अभिगम्यता प्रबंधक से पूछताछ करता है कि क्या कोई पहुंच योग्यता सेवाएं सक्षम हैं जो "बोले गए फ़ीडबैक" ध्वज का समर्थन करती हैं।

AccessibilityServices services = AccessibilityServices.newInstance(context); 
services.isSpokenFeedbackEnabled(); 
+1

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

0

मेरे लिए, मैं इस तरह से इस समस्या का समाधान है, यह मेरी परियोजना में अच्छी तरह से काम करता है:

  1. उपयोग getEnabledAccessibilityServiceList() सभी पहुँच क्षमता सेवा, एक सेवा, जिसकी स्थिति खुले में हो जाएगा प्राप्त करने के लिए इस सूची
  2. Talkback com.android.talkback.TalkBackPreferencesActivity नाम के एक गतिविधि शामिल है, तो आप को खोजने के लिए सूची traversing सकते हैं कि क्या talkback सेवा खुला है

विस्तृत नीचे कोड:

private static final String TALKBACK_SETTING_ACTIVITY_NAME = "com.android.talkback.TalkBackPreferencesActivity"; 

    public static boolean accessibilityEnable(Context context) { 
     boolean enable = false; 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
      try { 
       AccessibilityManager manager = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE); 
       List<AccessibilityServiceInfo> serviceList = manager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN); 
       for (AccessibilityServiceInfo serviceInfo : serviceList) { 
        String name = serviceInfo.getSettingsActivityName(); 
        if (!TextUtils.isEmpty(name) && name.equals(TALKBACK_SETTING_ACTIVITY_NAME)) { 
         enable = true; 
        } 
       } 
      } catch (Exception e) { 
       if (Logging.isDebugLogging()) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return enable; 
} 
+0

वे भविष्य के अपडेट में सेटिंग गतिविधि का नाम बदल सकते हैं। – ataulm

0

ओपन सिस्टम सेटिंग और पहुंच के पास जाकर बंद वापस विकल्प

+0

मुझे लगता है कि ओपी प्रोग्रामेटिक रूप से जांच कर रहा है कि 'टॉकबैक' सक्रिय है या नहीं। – adiga

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। एक बार आपके पास पर्याप्त [प्रतिष्ठा] (https://stackoverflow.com/help/whats-reputation) हो जाने पर आप [किसी भी पोस्ट पर टिप्पणी कर सकेंगे] (https://stackoverflow.com/help/privileges/comment); इसके बजाय, [उन उत्तरों को प्रदान करें जिन्हें पूछताछ से स्पष्टीकरण की आवश्यकता नहीं है] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-कर-बजाय)। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाले पदों/17842918) – clemens