获取AccessibilityNodeInfo的视图以创建叠加层

时间:2015-02-15 18:41:48

标签: android service accessibility accessibilityservice

我正在编写AccessibilityService,并且我想在可访问性服务可以检索的当前活动的视图上创建视图叠加层。从当前活动中检索所有AccessibilityNodeInfo对象没有问题,但我不知道如何从这些对象中获取视图以创建叠加层。不幸的是,关于无障碍服务的例子很少。也许你们中的一些人已经有过这个主题的经验。我希望你能帮帮我!谢谢!

编辑:一篇论文表明,可以在活动的视图内容上叠加:

  

显示叠加层能够执行这些任务   Android辅助功能框架[10]。使用辅助功能API,它   能够访问和检查屏幕上应用程序的GUI布局,   无需修改或修改应用程序代码。" *

链接:http://www.onarlioglu.com/publications/fc2015babelcrypt.pdf

第6页和第8页。谢谢!

2 个答案:

答案 0 :(得分:4)

您无法从其他应用获取View个对象,因为View个对象与您的对象处于不同的过程中。

答案 1 :(得分:0)

使用辅助功能服务在窗口上绘制叠加层很容易。我知道这是一个老问题,但我还是认为我还要添加答案。

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

一旦在整个屏幕的顶部有一个不可见的相对布局覆盖,就很容易添加视图!