Я хочу создать приложение для Android, которое «сканирует» другие приложения, и узнает, есть ли кнопки и т. Д. Некоторые приложения, например WhatsApp, не позволяют третьим частям перемещаться в приложение, поэтому Я, хотя это может быть решением проблемы доступности. Теперь проблема в том, что я никогда не использовал Accessibility, так может кто-то из вас может показать мне, как «сканировать» макет приложения, чтобы найти кнопки? Большое спасибоИспользование доступности
ответ
Что вы ищете, это Служба специальных возможностей. Настройка службы доступности несколько сложна. Я создал репозиторий кода шаблона доступности, который настраивает 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
Я не понимаю, почему это было бы закрыто. Мне кажется, что кто-то голосует, чтобы закрыть это, непонятно. Телефонный код службы поддержки Android - отличный вопрос! Я буду работать над ответом. Я имел в виду опубликовать репозиторий github с некоторым шаблоном Service A11y Service. Дайте мне 24 часа! И не закрывайте этот вопрос, просто потому, что вы этого не понимаете! – ChrisCM