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

时间:2018-03-28 19:10:09

标签: android service accessibility sensor

我正在构建一个辅助服务,就像对讲一样,但我没有使用触摸屏手势来控制智能手机。

我能够浏览UI的所有项目,并成功使用accessibilityNodeInfo滚动listViews和ScrollViews。但是,在关于主屏幕时,我不知道如何在它们之间进行更改。

  1. 如何使用AccessibilityNodeInfo执行此操作?可能吗?怎么样?
  2. 如果没有,我可以使用Intent吗?我设法通过:Intent i = new Intent("android.intent.action.MAIN"); i.addCategory("android.intent.category.HOME");
  3. 进入主屏幕

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

    1. 我尝试根据 Omerjerk 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();
      
      }
      
    2. 你能帮我提一下如何在屏幕之间切换吗? 提前致谢!

1 个答案:

答案 0 :(得分:0)

我已经使用AccessibilityNodeInfo解决了问题,即使用户看不到窗口的所有节点。然后我关注元素来改变屏幕