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