从抽象类访问Android Accessibility.Gesture

时间:2017-11-03 05:43:07

标签: android android-gesture accessibilityservice

我正试图在屏幕的某个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();
}

1 个答案:

答案 0 :(得分: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);
    }
}