7

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

编辑:一篇论文表明,覆盖活动的视图内容是可能的:

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

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

第 6 页和第 8 页。谢谢!

4

2 回答 2

4

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

于 2015-02-15T18:47:05.647 回答
1

使用无障碍服务在窗口上绘制覆盖图很容易。我知道这是一个老问题,但我想我还是会添加答案。

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

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

于 2017-02-26T06:03:21.717 回答