【问题标题】:How do you detect when user turns off accessibility service in Android?您如何检测用户何时关闭 Android 中的无障碍服务?
【发布时间】:2018-05-02 09:04:18
【问题描述】:

我正在 Android 中开发无障碍服务。 我想在用户关闭无障碍服务时禁用某些功能,但我不确定如何检测到。

我想当用户关闭它时,它会调用onDestroy(),但显然它没有被调用。

有什么方法可以知道用户何时关闭无障碍服务? 或者是否有一个函数在用户关闭时被调用?

(以防万一,我正在开发 Android Wear。)

非常感谢!! 我感谢您的帮助! :)

【问题讨论】:

标签: android kotlin accessibilityservice android-wear-2.0


【解决方案1】:

interface AccessibilityManager.AccessibilityStateChangeListener

系统可访问性状态的侦听器。要监听设备上可访问性状态的变化,实现该接口并通过调用addAccessibilityStateChangeListener向系统注册。

例子:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    AccessibilityManager am = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
    am.addAccessibilityStateChangeListener(new AccessibilityManager.AccessibilityStateChangeListener() {
        @Override
        public void onAccessibilityStateChanged(boolean b) {
            Log.d(TAG,"onAccessibilityStateChanged b=" + b);
            updateServiceStatus(b);
        }
    });
    updateServiceStatus(am.isEnabled());
}

programcreek.com 上的更多 java 示例。

【讨论】:

  • 不幸的是,这只检查是否启用了任何无障碍服务。它在启用第一个服务或禁用最后一个服务时触发。这同样适用于您的第一个答案和AccessibilityManager.isEnabled
  • 正如@Phoca 所说,这种方法的行为并不像人们认为的那样。但是accessibilityService在禁用时会调用onDestroy
【解决方案2】:

我不知道任何通知应用程序有关无障碍服务状态更改的事件、广播或回调。我能想到的最好的办法是偶尔手动检查服务状态:

AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();

文档:AccessibilityManager#isEnabled()

【讨论】:

  • 这会检查是否有任何无障碍服务开启,还是检查特定的无障碍服务?
  • @user3415167 看看我的第二个答案。看起来就是您要找的东西。
猜你喜欢
  • 1970-01-01
  • 2022-06-18
  • 1970-01-01
  • 2021-07-15
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多