2017-02-20 19 views
0

Я хочу создать приложение для Android, которое «сканирует» другие приложения, и узнает, есть ли кнопки и т. Д. Некоторые приложения, например WhatsApp, не позволяют третьим частям перемещаться в приложение, поэтому Я, хотя это может быть решением проблемы доступности. Теперь проблема в том, что я никогда не использовал Accessibility, так может кто-то из вас может показать мне, как «сканировать» макет приложения, чтобы найти кнопки? Большое спасибоИспользование доступности

+0

Я не понимаю, почему это было бы закрыто. Мне кажется, что кто-то голосует, чтобы закрыть это, непонятно. Телефонный код службы поддержки Android - отличный вопрос! Я буду работать над ответом. Я имел в виду опубликовать репозиторий github с некоторым шаблоном Service A11y Service. Дайте мне 24 часа! И не закрывайте этот вопрос, просто потому, что вы этого не понимаете! – ChrisCM

ответ

0

Что вы ищете, это Служба специальных возможностей. Настройка службы доступности несколько сложна. Я создал репозиторий кода шаблона доступности, который настраивает AccessibilityService, который регистрирует иерархию узлов в LogCat, и имеет активность по умолчанию для параметров проекта, настроенную как активность настроек. Вот некоторые из основных моментов, поскольку мне не нравится просто публиковать репозитории github в качестве ответов. Обратите внимание, что я использую много собственных библиотек. CLog - это библиотека протоколирования, а AndroidAccessibilityUtils обертывает информацию о узле некоторыми общедоступными функциями. Вы можете найти ссылки на зависимости в файле build.gradle в репозитории github внизу. Вот некоторые основные моменты кода.

Ваш файл manifest.xml будет существенно отличаться от деятельности, и должен содержать запись, как это в элементе Application:

<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> 

Сначала вам нужно создать подкласс Accessibility услуг:

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."); 
    } 
} 

Это основная часть основных моментов. У вас также должен быть XML-код «service_config» со свойствами, как указано в изменениях в файле манифеста XML. Более подробную информацию и разумную стартовую точку можно найти в репозитории с открытым исходным кодом на GitHub.

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