「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
为用户执行操作
从 Android 4.0(API 级别 14)开始,无障碍服务可以代表用户执行操作,包括更改输入焦点和选择(激活)界面元素。在 Android 4.1(API 级别 16)中,操作的范围已经过扩展,包括了滚动列表以及与文字字段互动。无障碍服务还可以执行全局操作,如转到主屏幕、按“返回”按钮,以及打开通知屏幕和最近用过的应用列表。Android 4.1 还包含一种新的焦点类型,即“无障碍服务焦点”,它使所有可见元素都能由无障碍服务选择。
这些新功能使无障碍服务的开发者能够创建替代导航模式(如手势导航),并使残障用户能够更好地控制他们的 Android 设备。
监听手势
无障碍服务可以监听特定手势,并通过代表用户执行操作进行响应。此功能是在 Android 4.1(API 级别 16)中添加的,它要求无障碍服务请求激活“触摸浏览”功能。服务请求激活该功能的方法是将其 AccessibilityServiceInfo 实例的flags 成员设为 FLAG_REQUEST_TOUCH_EXPLORATION_MODE,如以下示例所示:
public class MyAccessibilityService extends AccessibilityService {
@Override
public void onCreate() {
getServiceInfo().flags = AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE;
}
...
}
服务请求激活“触摸浏览”之后,用户必须允许开启该功能(如果尚未激活)。激活此功能后,服务可通过其 onGesture() 回调方法接收无障碍手势的通知,并且可以通过为用户执行操作进行响应。 连续手势
搭载 Android 8.0(API 级别 26)的设备包含对连续手势或包含多个 Path 对象的程序化手势的支持。
指定连续轻触时,您必须使用 GestureDescription.StrokeDescription 构造函数中的最后一个参数 willContinue 指定它们属于同一个程序化手势,如以下代码段所示:
// Simulates an L-shaped drag path: 200 pixels right, then 200 pixels down.
private void doRightThenDownDrag() {
Path dragRightPath = new Path();
dragRightPath.moveTo(200, 200);
dragRightPath.lineTo(400, 200);
long dragRightDuration = 500L; // 0.5 second
// The starting point of the second path must match
// the ending point of the first path.
Path dragDownPath = new Path();
dragDownPath.moveTo(400, 200);
dragDownPath.lineTo(400, 400);
long dragDownDuration = 500L;
GestureDescription.StrokeDescription rightThenDownDrag =
new GestureDescription.StrokeDescription(dragRightPath, 0L,
dragRightDuration, true);
rightThenDownDrag.continueStroke(dragDownPath, dragRightDuration,
dragDownDuration, false);
}