2016-02-19 44 views
2

我創建了我的無障礙服務,我想只有在「關機」菜單出現時才撥打電話OnAccessibilityEvent(),我的目標是撥打TTS引擎,以便在屏幕上顯示此菜單時使手機通話。使用Android的無障礙服務檢測「關機/重啓菜單」?

我需要了解的一切是如何檢測這個唯一的事件。

這裏是我的xml:

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

太謝謝你了!

回答

1

不,沒有可靠的方法來做到這一點。唯一的方法是做這件事。這樣做的黑客辦法如下:

你可以聽窗口內容改變事件,我相信常數是TYPE_WINDOW_CONTENT_CHANGED

所以完整的代碼是:

public void onAccessibilityEvent(AccessibilityEvent e) { 

    switch (e.getEventType()) { 
     case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: { 

      if (isPowerMenu(getRootInActiveWindow()) { 
       doYourStuff(); 
      } 
     } 
    } 
} 

private boolean isPowerMenu(AccessibilityNodeInfo nodeInfo) { 
    //In here assume you've been given the root accessibility 
    //node of the power menu. It should be easy to detect specific 
    //power menu views. However, this will be very fragile, and 
    //depend on which version of the Android Launcher, OS, etc you 
    //have. Hence the comments, and no code :) 
} 

的問題是,每一個電源開/關菜單上可能會有所不同。所以這種方法只適用於特定的啓動器應用程序。但即使如此,有人可能會在另一個應用程序中創建一個相同的模式。因此,即使在設定的啓動器/設備/操作系統版本中,您也可能發生誤報檢測。

+0

夢幻般的答案,我是在同一條路上。但是我有最後一個問題,我試圖用'e.getText()'得到視圖的文本,但它只給我按鈕和textview的文本...不是所有窗口的內容。任何想法?謝謝! –

+0

這聽起來像是一個單獨的問題。一個好的。要麼編輯這個問題,要麼指向我的新問題,我會回答它。另外,當你說「查看」時,你的意思是什麼?父視圖,事件源視圖等... – ChrisCM

+0

好吧,也許你是對的,我將認真考慮這個問題。請檢查這個新的:http://stackoverflow.com/questions/35581688/how-to-detect-all-views-and-text-inside-a-system-dialog –