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