繁体   English   中英

如何从另一个服务调用AccessibilityService方法?

[英]How call a AccessibilityService method from another service?

我试图调用一个存在于扩展一个类的方法AccessibilityService从延伸到另一个类Service是这样的:

MyAccessibility access = new MyAccessibility();
access.doAction(); // doAction(); is the method called

但是什么也没有发生,如果在MyAccessibilityAccessibilityService类)中调用了它,一切都可以正常工作。

public class MyAccessibility extends AccessibilityService {

@Override
    protected void onServiceConnected() {
        super.onServiceConnected();

        System.out.println("Accessibility was connected!");

        doAction();
    }

    public void doAction(){

    performGlobalAction(GLOBAL_ACTION_RECENTS);

    }

}

然后,如何从另一个服务调用MyAccessibility任何方法?


编辑:

我也尝试将doAction()更改为static ,但是performGlobalAction不能为static

解决方案是通过单例访问MyAccessibility

public class MyAccessibility extends AccessibilityService {

public static MyAccessibility instance;

@Override
    protected void onServiceConnected() {
        super.onServiceConnected();

        System.out.println("Accessibility was connected!");

        instance = this;

    }

    public void doAction(){

    performGlobalAction(GLOBAL_ACTION_RECENTS);

    }

}

并调用doAction(); 通过这样的服务:

MyAccessibility.instance.doAction();

你不能 尽管提供的答案将导致代码运行,但肯定不会以您期望的方式运行。 AccessibilityServices与普通Services 他们获得更高的特权。 为了获得这些提升的特权,它们必须在自己的特殊Context运行,而获得该状态的唯一方法是从AccessibilityServices设置菜单中启动服务... TalkBack在哪里。

您可以……不应该……但是您可以,启动服务并使用进程内通信机制来使功能在您希望从另一个进程运行时运行。 从功能的角度来看,这是实现所需目标的唯一方法。

我认为我们需要意图调用该服务,然后它将像服务一样执行。

Intent intent = new Intent(this,HelloService.class); startService(意向);

https://developer.android.com/guide/components/services

如果我们要专门调用此方法,则将此方法复制到常规类中并调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM