代码之家  ›  专栏  ›  技术社区  ›  David Costa

如何以编程方式在主屏幕之间滚动?

  •  1
  • David Costa  · 技术社区  · 7 年前

    我正在构建一个与对讲一样的无障碍服务,但我使用空中手势来控制智能手机,而不是触摸屏手势。

    我能够使用accessibilityNodeInfo成功地浏览UI的所有项目并滚动ListView和ScrollView。然而,关于主屏幕,我不知道如何在它们之间进行切换。

    1. 如何使用AccessibilityNodeInfo实现这一点?有可能吗?怎样
    2. 如果没有,我可以使用Intent来执行此操作吗?我通过以下方式进入主屏幕: Intent i = new Intent("android.intent.action.MAIN"); i.addCategory("android.intent.category.HOME");

    但我想得到一个主屏幕列表,并能够像滑动手势一样滚动它们。

    1. 我曾尝试根据 RemoteDroid 通过 奥梅杰尔

      int source = InputDevice.SOURCE_TOUCHSCREEN;
      float pressure = 1.0f;
      
      try {
      
          ei.injectMotionEvent(source,MotionEvent.ACTION_DOWN, systemClock.uptimeMillis(), 800,200, pressure );
          ei.injectMotionEvent(source,MotionEvent.ACTION_MOVE, SystemClock.uptimeMillis(), 790, 200, pressure );
          ei.injectMotionEvent(source,MotionEvent.ACTION_MOVE, SystemClock.uptimeMillis() , 670,200, pressure );
          ei.injectMotionEvent(source,MotionEvent.ACTION_MOVE, SystemClock.uptimeMillis() , 560,200, pressure );
          ei.injectMotionEvent(source,MotionEvent.ACTION_MOVE, SystemClock.uptimeMillis() , 450,200, pressure );
          ei.injectMotionEvent(source,MotionEvent.ACTION_MOVE, SystemClock.uptimeMillis() , 340,200, pressure );
          ei.injectMotionEvent(source,MotionEvent.ACTION_MOVE, SystemClock.uptimeMillis() , 230,200, pressure );
          ei.injectMotionEvent(source,MotionEvent.ACTION_UP, SystemClock.uptimeMillis(), 120,200, pressure );
      
      } catch (InvocationTargetException e) {
          e.printStackTrace();
      
      } catch (IllegalAccessException e) {
          e.printStackTrace();
      
      }
      

    你能帮我提示一下如何在屏幕之间切换吗? 提前感谢!

    1 回复  |  直到 7 年前
        1
  •  0
  •   David Costa    7 年前

    我使用AccessibilityNodeInfo解决了这个问题,它可以获取窗口的所有节点,甚至用户看不到的节点。然后我聚焦元素以更改屏幕