我正在尝试在屏幕的某一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();
}发布于 2018-07-14 10:55:07
您可以创建一个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);
}
}https://stackoverflow.com/questions/47089177
复制相似问题