首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从抽象类访问Android Accessibility.Gesture

从抽象类访问Android Accessibility.Gesture
EN

Stack Overflow用户
提问于 2017-11-03 13:43:07
回答 1查看 757关注 0票数 0

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

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

代码语言:javascript
复制
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;
}
}

这是我想要从其中调用方法的第二个类:

代码语言:javascript
复制
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()实现了这一点,但他们没有任何示例代码来说明如何做到这一点,或者确切地说你应该采用哪些方法。

代码语言:javascript
复制
protected void onServiceConnected()
{
    super.onServiceConnected();
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-14 10:55:07

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

1.创建AccessibilityService的静态字段

代码语言:javascript
复制
public class AutoService extends AccessibilityService {
    private static AutoService mAutoService; 
}

2.在onServiceConnected()中初始化

代码语言:javascript
复制
public class AutoService extends AccessibilityService {
    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        mAutoService = this;
    }

...
}

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

代码语言:javascript
复制
public class AutoService extends AccessibilityService {
    public static MyAccessibilityService getInstance(){
        return mAutoService;
    }

...

}

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

代码语言:javascript
复制
public abstract class MyOtherClass {
    AutoService autoService = AutoService.getInstance();
    if(autoService != null) {
        autoService.pressLocation(x, y);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47089177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档