Получить представление AccessibilityNodeInfo для создания наложения

Я пишу AccessibilityService и хочу создать наложения представлений для представлений из текущей активности, которые может получить служба специальных возможностей. У меня нет проблем с получением всех объектов AccessibilityNodeInfo из текущей активности, но я понятия не имею, как получить представления этих объектов для создания наложений. К сожалению, есть только несколько примеров, касающихся услуг доступности. Возможно, у кого-то из вас уже есть опыт работы с этой темой. Я надеюсь, что вы можете помочь мне! Спасибо!

РЕДАКТИРОВАТЬ: документ показывает, что возможны наложения на содержимое просмотра активности:

Оверлей дисплея способен выполнять эти задачи благодаря Android Accessibility Framework [10]. Используя API специальных возможностей, он может получить доступ и проверить макет графического интерфейса приложений на экране, не требуя изменений или инструментовки кода приложения."*

Ссылка: http://www.onarlioglu.com/publications/fc2015babelcrypt.pdf

Страница 6 и 8. Спасибо!


person zuuurek    schedule 15.02.2015    source источник
comment
Получите границы экрана из файла AccessibilityNodeInfo. Преобразуйте в координаты, которые относятся к границам вашего наложения на экране. Нарисуйте наложение.   -  person alanv    schedule 08.03.2015


Ответы (2)


Вы не можете получить объекты View из других приложений, так как объекты View находятся в отдельном от вашего процесса.

person CommonsWare    schedule 15.02.2015
comment
Спасибо за быстрый ответ! Но как можно создавать наложения видов на объекты вида? Я знаю, что это должно быть возможно, потому что я читал статью об этом. Графический интерфейс действия был пройден через службу специальных возможностей, а затем были созданы наложения представлений. - person zuuurek; 15.02.2015
comment
@zuuurek: Но как можно создавать наложения видов на объекты вида? -- Я понятия не имею, что вы хотите этим сказать. Я знаю, что это должно быть возможно, потому что я читал статью об этом — у вас есть ссылка? - person CommonsWare; 15.02.2015

Рисовать наложения поверх окна с помощью специальных сервисов очень просто. Я знаю, что это старый вопрос, но я подумал, что все равно добавлю ответ.

RelativeLayout relativeLayout = new RelativeLayout(getContext());

WindowManager.LayoutParams topButtonParams = new WindowManager.LayoutParams(
    width, //The width of the screen
    height, //The height of the screen
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
    PixelFormat.TRANSLUCENT);

//Just trust me, this alpha thing is important.  I know it's weird on a "translucent" view.
topButtonParams.alpha = 100;

relativeLayout.setLayoutParams(topButtonParams);

mWindowManager.addView(relativeLayout, topButtonParams);

Кроме того, вам нужно это разрешение в вашем манифесте

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Если у вас есть невидимое относительное наложение макета поверх всего экрана, добавлять представления к нему очень просто!

person ChrisCM    schedule 26.02.2017