getAccessibilityButtonController Android辅助功能服务

时间:2017-06-07 02:22:32

标签: android

我一直在研究Android O中可用于Accessibility的新方法。我遇到了这个名为getAccessibilityButtonController的新方法,我不确定它的作用和用途。我知道在Android O中有一个导航按钮,可用于辅助功能服务。此辅助功能按钮是仅启动辅助功能服务,还是在服务中具有其他功能(例如执行特定任务)?我很好奇可访问性和getAccessibilityButtonController方法的用途。谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

它可以做你想要的任何事情。从android accessibility doc开始,该按钮允许您注册具有onClicked方法的回调。如果您启用按钮并提供所述回调,您可以在该回调的上下文中执行您想要的任何内容。

编辑:Android文档已更新,因此不再需要以下内容。

请注意,如果您阅读了doc,那么当前有一个示例在onCreate()中调用了getAccessibilityButtonController()。这是不正确的,因为在调用onServiceConnected之前控制器无效。我修改了下面的例子来展示应该有用的东西。

private AccessibilityButtonController mAccessibilityButtonController;
private AccessibilityButtonController
        .AccessibilityButtonCallback mAccessibilityButtonCallback;
private boolean mIsAccessibilityButtonAvailable;

@Override
protected void onServiceConnected() {
    mAccessibilityButtonController = getAccessibilityButtonController();
    mIsAccessibilityButtonAvailable =
            mAccessibilityButtonController.isAccessibilityButtonAvailable();

    if (!mIsAccessibilityButtonAvailable) {
        return;
    }

    AccessibilityServiceInfo serviceInfo = getServiceInfo();
    serviceInfo.flags
            |= AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON;
    setServiceInfo(serviceInfo);

    mAccessibilityButtonCallback =
        new AccessibilityButtonController.AccessibilityButtonCallback() {
            @Override
            public void onClicked(AccessibilityButtonController controller) {
                Log.d("MY_APP_TAG", "Accessibility button pressed!");

                // Add custom logic for a service to react to the
                // accessibility button being pressed.
            }

            @Override
            public void onAvailabilityChanged(
              AccessibilityButtonController controller, boolean available) {
                if (controller.equals(mAccessibilityButtonController)) {
                    mIsAccessibilityButtonAvailable = available;
                }
            }
        };

    if (mAccessibilityButtonCallback != null) {
        mAccessibilityButtonController.registerAccessibilityButtonCallback(
                mAccessibilityButtonCallback, null);
    }
}