【问题标题】:Access Android Accessibility.Gesture from abstract class从抽象类访问 Android Accessibility.Gesture
【发布时间】:2018-07-14 10:55:07
【问题描述】:

我正在尝试点击屏幕的某个 X Y 部分。我遇到的问题是当我直接从我的抽象类调用它时,dispatchGesture 不会触发。如何直接从抽象类中调用?

到目前为止,我知道如果我在我的抽象类中设置一个静态变量,我可以访问它,但这意味着必须触发一个新事件,而不是使用触发有点慢或过时的过去事件:

public class AutoService extends AccessibilityService {
public static boolean canDoTask = false;
public static int SX = 100;
public static int SY = 100;

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
 AccessibilityNodeInfo source = event.getSource();
    String packageName = Tools.getPackage(source);

  if (canDoTask){
      pressLocation(SX, SY);
   }
}

public void pressLocation(int x, int y){
    Log.e(TAG, "PRESS LOCATION : " + x +":"+ y);
    GestureDescription.Builder builder = new GestureDescription.Builder();
    Path p = new Path();
    p.moveTo(x, y);
    builder.addStroke(new GestureDescription.StrokeDescription(p, 150L, 50L));
    GestureDescription gesture = builder.build();
    dispatchGesture(gesture, new GestureResultCallback() {
        @Override
        public void onCompleted(GestureDescription gestureDescription) {
            super.onCompleted(gestureDescription);
            Log.e(TAG, "DISPACHED");
        }

        @Override
        public void onCancelled(GestureDescription gestureDescription) {
            super.onCancelled(gestureDescription);
            Log.e(TAG, "CANCELLED");
        }
    }, null);

    Log.e(TAG, "END OF PRESS");
    canDoTask = false;
}
}

这是我要从中调用方法的二级课程:

public abstract class MyOtherClass
{
    // SOME CODE HERE TO CHECK VARIABLES



    // THIS IS WHERE I WANT TO CALL pressLocation at
    public static void processTask()
    {
         canDoTask = true;
    }
}

我在一个论坛上读到有人使用onServiceConnect() 做到了这一点,但他们没有任何示例代码说明您将如何执行此操作或您将采用哪些方法。

protected void onServiceConnected()
{
    super.onServiceConnected();
}

【问题讨论】:

  • 我建议以不同的方式提出这个问题。问:“我如何在给定的类中调用我无权访问的函数,从所说的类”只会让你回答:“你不能”。但是,如果您根据您想要完成的任务来询问它,也许我们可以提出比您正在尝试的更好的东西,而无需在黑暗中刺伤您的实际意图。

标签: android android-gesture accessibilityservice


【解决方案1】:

您可以创建一个AccessibilityService 实例并通过它调用方法。

1.创建AccessibilityService的静态字段:

public class AutoService extends AccessibilityService {
    private static AutoService mAutoService; 
}

2.在onServiceConnected()中初始化:

public class AutoService extends AccessibilityService {
    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        mAutoService = this;
    }

...
}

3.创建获取实例的方法:

public class AutoService extends AccessibilityService {
    public static MyAccessibilityService getInstance(){
        return mAutoService;
    }

...

}

4.现在在你的抽象类中:

public abstract class MyOtherClass {
    AutoService autoService = AutoService.getInstance();
    if(autoService != null) {
        autoService.pressLocation(x, y);
    }
}

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多