【问题标题】:Get view of AccessibilityNodeInfo to create overlay获取 AccessibilityNodeInfo 的视图以创建覆盖
【发布时间】:2017-02-26 14:03:21
【问题描述】:

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

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

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

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

第 6 页和第 8 页。谢谢!

【问题讨论】:

  • AccessibilityNodeInfo 检索屏幕边界。转换为相对于叠加层屏幕边界的坐标。绘制到您的叠加层。

标签: android service accessibility accessibilityservice


【解决方案1】:

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

【讨论】:

  • 感谢您的快速答复!但是他们怎么可能在视图对象上创建视图覆盖?我知道这必须是可能的,因为我读过一篇关于它的论文。 Activity 的 GUI 已通过 Accessibility Service 遍历,然后创建了视图叠加层。
  • @zuuurek:“但是他们怎么可能在视图对象上创建视图覆盖?” ——我不明白你的意思。 “我知道这是可能的,因为我读过一篇关于它的论文”——你有链接吗?
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2021-05-09
    • 2013-07-16
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多