2016-03-17 18 views
5

Ne yapmaya çalışıyorum/Ne yaptım: Görme engelli kullanıcılar için TalkBack'in çok basit bir sürümünü oluşturmaya çalışıyorum. Kullanıcı tarafından tıklanan bir düğmenin contentDescription öğesini okuyan ve bunu sesli okuyan basit bir erişilebilirlik hizmeti hazırladım.Bir eylemin AccessibilityService'de gerçekleştirilmesine nasıl müdahale edilir?

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 

    // get the source node of the event 
    AccessibilityNodeInfo source = event.getSource(); 
    if (source == null) { 
     return; 
    } 

    // Check if a button is clicked and speak out the content 
    if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED 
     && BUTTON_CLASS_NAME.equals(source.getClassName()) { 
      Log.d("Button clicked", source.getViewIdResourceName().toString()); 
      convertTextToSpeech(source.getContentDescription().toString()); 
     } 

    if (source != null) 
     source.recycle(); 
    return; 
} 

sorun: Fakat, kullanıcı ÖNCE aslında düğmesi tıklandığında yangınlar eylemi gerçekleştiren düğmenin açıklaması dinleyemiyorum bu şekilde. Kullanıcı açıklamayı dinlediğinde, düğme zaten tıklanmış ve bir eylem gerçekleştirilmiştir.

Soru: Ben eylemi kesme nasıl (örn: düğmesine tıkladıktan sonra yeni bir aktivite açılması) kullanıcı güvenli bir şekilde yeni başlatmadan sağlamak geribildirim ile ekranda mevcut görüşleri keşfetmeleri gerçekleştirilen olmaktan faaliyetler veya diğer eylemleri ateşlemek?

Talkback'de neler olduğu gibi bir şey: açıklamayı duymak için kullanıcı tek dokunuşları ve eylemi gerçekleştirmek için iki kez dokunuldu. Talkback, kullanıcı iki kez dokunmadıkça bir eylemin gerçekleşmesini nasıl önler? TouchExplorationMode'a baktım ama sanırım daha çok tıklamalardan ziyade jestler için kullanılıyor.

cevap

1

Yanlış yere bakıyorsunuz. onAccessibilityEvent bir olayı aldığında, eylem zaten gerçekleştirilmiştir. Sadece sizi bilgilendirir, bir tıklama olayı oluştu. Bunu durdurmak için çok geç oldu.

Gerçekten de gerçekten de TouchExplorationMode istersiniz. İşte, TalkBack'in kullanımının hızlı ve kirli bir uygulaması ve kullanıcı arayüzünün, fazladan gereksiz ve istisnai bir işlem yapmadan nasıl davrandığını nasıl etkilediği. Sadece bu özellik için önemli olan bölümleri içerdim. Elbette bir çok başka gerekli iskele var, ama bu anahtar unsurlardan uzaklaşacaktır. serviceConfig.xml ait

İçindekiler: A11yService.java

ait

<?xml version="1.0" encoding="utf-8"?> 
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accessibilityEventTypes="typeAllMask" 
    android:accessibilityFlags="flagRequestTouchExplorationMode" 
    android:canRequestTouchExplorationMode="true" 
    /> 

Kısmi İçerik

@Override 
public void onAccessibilityEvent(AccessibilityEvent e) { 

    switch (e.getEventType()) { 
     case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER: { 
      e.getSource().performAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS); 
     } 
    } 
} 

TalkBack'in sonra onGesture içinde hareketlerini durdurur ve sağa kaydırın veya hızlıca sola için, onları yakalar ve yapar AccessibilityNode geçişindeki bir sonraki veya bir önceki öğede aynı eylem (erişilebilirlik). Tereyağından kıl çeker gibi!

İlgili konular