2017-02-20 113 views
0

我想創建一個Android應用程序,將「掃描」等applications'layouts,並找出是否有按鈕等 一些應用程序,例如WhatsApp,不允許第三部分移動到應用程序,所以我雖然認爲使用可訪問性可能是解決方案。 現在的問題是,我從來沒有用過輔助,所以你有人能請告訴我如何「掃描」應用程序的佈局找到按鈕? 非常感謝使用輔助

+0

我不明白爲什麼會被關閉。在我看來,任何投票結束這個問題的人都會誤解這個問題。 Android可訪問性服務樣板代碼是一個很好的問題!我會回答一個問題。我一直想用一些A11y服務樣板文件發佈github回購。給我24小時!並且不要關閉這個問題,只是因爲你不瞭解它! – ChrisCM

回答

0

什麼你要找的是一項輔助服務。配置無障礙服務有點複雜。我已成立的無障礙樣板代碼庫,設置了該記錄的節點層次結構,以logcat的一個AccessibilityService,並具有默認項目設置活動設置爲它設置的活動。這裏有一些亮點,因爲我不喜歡只發布github回購作爲答案。請注意,我使用了很多自己的庫。 CLog是一個日誌庫,AndroidAccessibilityUtils通過一些常用的實用功能來包裝節點信息。你可以找到在底部的GitHub庫中的build.gradle文件中的依賴引用。以下是一些代碼亮點。

你manifest.xml文件將是從活動顯著不同,應該包含這樣一個條目在您的應用程序元素:

<application .... > 
    ... 
    <service 
     android:name="com.moba11y.basicaccessibilityservice.BasicAccessibilityService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" > 

     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.accessibilityservice" 
      android:resource="@xml/service_config" /> 

    </service> 
    ... 
</application> 

首先,你需要創建無障礙服務的一個子類:

public class BasicAccessibilityService extends AccessibilityService { 

    static { 
     CLog.initialize(BasicAccessibilityService.class.getSimpleName(), BuildConfig.DEBUG); 
    } 
    @Override 
    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()); 

      default: { 
       //If the event has a source, let's print it out separately. 
       if (event.getSource() != null) { 
        CLog.d(A11yNodeInfo.wrap(event.getSource()).toViewHeirarchy()); 
       } 
      } 
     } 
    } 

    @Override 
    public void onInterrupt() { 
     CLog.e("Service Interrupted: Have never actually had this happen."); 
    } 
} 

這是其中的亮點大頭。您還應該擁有帶有屬性的「service_config」XML,如清單XML文件更改中所引用的那樣。更多細節和合理的觀點可以在GitHub上的開源回購中找到。

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