如何以编程方式启动和停止AccessibilityService?

时间:2016-11-05 00:15:07

标签: android accessibilityservice

背景

我有一个AccessibilityService的应用。 Android似乎一直在运行AccessibilityService,但我只需要运行有时。 (具体来说,如果用户打开我的应用并将其关闭,则不再需要AccessibilityService。)

如果我的AccessibilityService在不需要时运行,则会浪费设备的RAM和CPU,我想尽可能避免对用户这样做。

问题

如何以编程方式启动和停止AccessibilityService

请注意,我要求以编程方式启用或禁用Android的辅助功能设置中的AccessibilityService;这只是在它已经启用时启动和停止它。

我尝试了什么(停止AccessibilityService

相关问题

2 个答案:

答案 0 :(得分:1)

取自the Lifecycle section of the AccessibilityService documentation

  

可访问性服务的生命周期由系统专门管理,并遵循既定的服务生命周期。启动辅助功能服务仅由用户在设备设置中明确启用服务来触发。系统绑定到服务后,会调用onServiceConnected()。希望执行后绑定设置的客户端可以覆盖此方法。

     

当用户在设备设置中将其关闭或拨打disableSelf()时,辅助功能服务会停止。

答案 1 :(得分:1)

正如Sam的回答所述,AccessibilityService的生命周期完全由系统管理,因此您无法将其杀死。

但是,除了资源优化目标之外,如果您仍然需要启动/停止AccessibilityService在某些情况下运行,您可以简单地使用旧的SharedPreferences

您的服务的 onAccessibilityEvent 应为:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    if (prefs.getBoolean("isServiceEnabled", true)){
        /*
        * Your code goes here
        */
    }
}

当您想"关闭/开启"你可以通过在一些按钮的 onClickListener 或其他地方根据你的需要写这个服务来做到这一点:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

prefs.edit().putBoolean("isServiceEnabled", false).apply(); // disable

prefs.edit().putBoolean("isServiceEnabled", true).apply();  // enable