Most visited

Recently visited

Added in API level 4

AccessibilityService

public abstract class AccessibilityService
extends Service

java.lang.Object
   ↳ android.content.Context
     ↳ android.content.ContextWrapper
       ↳ android.app.Service
         ↳ android.accessibilityservice.AccessibilityService


辅助功能服务旨在帮助残障用户使用Android设备和应用。 他们在后台运行并在系统AccessibilityEvent时收到系统回AccessibilityEvent 这样的事件表示用户界面中的一些状态转换,例如焦点已经改变,按钮被点击等。这种服务可以可选地请求查询活动窗口的内容的能力。 开发无障碍服务需要扩展这个类并实现其抽象方法。

Developer Guides

有关创建AccessibilityServices的更多信息,请阅读 Accessibility开发人员指南。

Lifecycle

无障碍服务的生命周期仅由系统管理,并遵循既定的服务生命周期。 启动无障碍服务是由用户明确地在设备设置中启用服务来触发的。 系统绑定到服务后,它调用onServiceConnected() 此方法可以被想要执行后绑定设置的客户端重写。

当用户在设备设置中关闭辅助功能时,或者在拨打 disableSelf()时,无障碍服务停止。

Declaration

可访问性被声明为AndroidManifest.xml中的任何其他服务,但它必须做两件事:

If either of these items is missing, the system will ignore the accessibility service. Following is an example declaration:

 <service android:name=".MyAccessibilityService"
         android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
     <intent-filter>
         <action android:name="android.accessibilityservice.AccessibilityService" />
     </intent-filter>
     . . .
 </service>

Configuration

可访问性服务可配置为接收特定类型的辅助功能事件,仅侦听特定的包,在给定的时间范围内仅从每种类型获取事件一次,检索窗口内容,指定设置活动等。

有两种配置无障碍服务的方法:

Retrieving window content

服务可以在声明中指定它可以检索窗口内容,该窗口内容以AccessibilityWindowInfoAccessibilityNodeInfo对象的树表示。 请注意,声明此功能需要该服务通过SERVICE_META_DATA引用的XML资源声明其配置。

窗口内容可以与被检索 AccessibilityEvent.getSource()findFocus(int)getWindows() ,或 getRootInActiveWindow()

注意可访问性服务可能已请求通知一部分事件类型,因此在节点层次结构发生更改时不知道。 节点也可能包含过时的信息,因为窗口内容可能随时发生变化。

Notification strategy

无论其反馈类型如何,所有无障碍服务都会收到所有已请求事件的通知。

注意事件通知超时对于避免将事件传播到客户端非常有用,因为这是通过昂贵的进程间调用完成的。 人们可以将超时作为确定事件发生何时平息的标准。

Event types

Feedback types

也可以看看:

Summary

Nested classes

class AccessibilityService.GestureResultCallback

用于报告已分派手势状态的类

class AccessibilityService.MagnificationController

用于控制和查询显示放大倍数的状态。

class AccessibilityService.SoftKeyboardController

用于控制和查询软键盘显示模式。

Constants

int GESTURE_SWIPE_DOWN

用户在触摸屏上执行了向下滑动手势。

int GESTURE_SWIPE_DOWN_AND_LEFT

用户在触摸屏上执行了向下和向左的手势。

int GESTURE_SWIPE_DOWN_AND_RIGHT

用户在触摸屏上执行了向下和向右的手势。

int GESTURE_SWIPE_DOWN_AND_UP

用户在触摸屏上执行了向下和向上滑动手势。

int GESTURE_SWIPE_LEFT

用户在触摸屏上执行了一个向左滑动的手势。

int GESTURE_SWIPE_LEFT_AND_DOWN

用户在触摸屏上执行了向左和向下的手势。

int GESTURE_SWIPE_LEFT_AND_RIGHT

用户在触摸屏上执行了左右滑动手势。

int GESTURE_SWIPE_LEFT_AND_UP

用户在触摸屏上执行了向左和向上的手势。

int GESTURE_SWIPE_RIGHT

用户在触摸屏上执行了向右滑动手势。

int GESTURE_SWIPE_RIGHT_AND_DOWN

用户在触摸屏上执行了向右和向下的手势。

int GESTURE_SWIPE_RIGHT_AND_LEFT

用户在触摸屏上执行了滑动左右手势。

int GESTURE_SWIPE_RIGHT_AND_UP

用户在触摸屏上执行了右手和上手的动作。

int GESTURE_SWIPE_UP

用户在触摸屏上执行了向上滑动手势。

int GESTURE_SWIPE_UP_AND_DOWN

用户在触摸屏上执行了上下滑动手势。

int GESTURE_SWIPE_UP_AND_LEFT

用户在触摸屏上执行了向上和向左的手势。

int GESTURE_SWIPE_UP_AND_RIGHT

用户在触摸屏上执行了向上的右手势。

int GLOBAL_ACTION_BACK

采取行动回去。

int GLOBAL_ACTION_HOME

行动回家。

int GLOBAL_ACTION_NOTIFICATIONS

采取行动打开通知。

int GLOBAL_ACTION_POWER_DIALOG

打开电源长按对话框的动作。

int GLOBAL_ACTION_QUICK_SETTINGS

采取措施打开快速设置。

int GLOBAL_ACTION_RECENTS

切换显示近期应用程序概述的动作

int GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN

操作切换当前应用程序的窗口

String SERVICE_INTERFACE

Intent必须声明为由服务处理。

String SERVICE_META_DATA

AccessibilityService组件发布有关其自身的信息的名称。

int SHOW_MODE_AUTO

int SHOW_MODE_HIDDEN

Inherited constants

From class android.app.Service
From class android.content.Context
From interface android.content.ComponentCallbacks2

Public constructors

AccessibilityService()

Public methods

final void disableSelf()

禁用该服务。

final boolean dispatchGesture(GestureDescription gesture, AccessibilityService.GestureResultCallback callback, Handler handler)

向触摸屏发送一个手势。

AccessibilityNodeInfo findFocus(int focus)

找到具有指定焦点类型的视图。

final AccessibilityService.MagnificationController getMagnificationController()

返回放大控制器,该控制器可用于查询和修改显示放大倍率的状态。

AccessibilityNodeInfo getRootInActiveWindow()

如果此服务可以检索窗口内容,则获取当前活动窗口中的根节点。

final AccessibilityServiceInfo getServiceInfo()

获取一个 AccessibilityServiceInfo描述此 AccessibilityService

final AccessibilityService.SoftKeyboardController getSoftKeyboardController()

返回软键盘控制器,可用于查询和修改软键盘显示模式。

Object getSystemService(String name)

按名称将句柄返回到系统级服务。

List<AccessibilityWindowInfo> getWindows()

获取屏幕上的窗口。

abstract void onAccessibilityEvent(AccessibilityEvent event)

回调 AccessibilityEvent s。

final IBinder onBind(Intent intent)

实现返回内部辅助功能服务接口的实现。

abstract void onInterrupt()

回调中断可访问性反馈。

final boolean performGlobalAction(int action)

执行全局操作。

final void setServiceInfo(AccessibilityServiceInfo info)

设置描述此服务的 AccessibilityServiceInfo

Protected methods

boolean onGesture(int gestureId)

当用户在触摸屏上执行特定手势时由系统调用。

boolean onKeyEvent(KeyEvent event)

允许无障碍服务在传递给系统其余部分之前观察关键事件的回调。

void onServiceConnected()

此方法是 AccessibilityService生命周期的一部分,并在系统成功绑定到服务后调用。

Inherited methods

From class android.app.Service
From class android.content.ContextWrapper
From class android.content.Context
From class java.lang.Object
From interface android.content.ComponentCallbacks2
From interface android.content.ComponentCallbacks

Constants

GESTURE_SWIPE_DOWN

Added in API level 16
int GESTURE_SWIPE_DOWN

用户在触摸屏上执行了向下滑动手势。

常量值:2(0x00000002)

GESTURE_SWIPE_DOWN_AND_LEFT

Added in API level 16
int GESTURE_SWIPE_DOWN_AND_LEFT

用户在触摸屏上执行了向下和向左的手势。

常量值:15(0x0000000f)

GESTURE_SWIPE_DOWN_AND_RIGHT

Added in API level 16
int GESTURE_SWIPE_DOWN_AND_RIGHT

用户在触摸屏上执行了向下和向右的手势。

常量值:16(0x00000010)

GESTURE_SWIPE_DOWN_AND_UP

Added in API level 16
int GESTURE_SWIPE_DOWN_AND_UP

用户在触摸屏上执行了向下和向上滑动手势。

常量值:8(0x00000008)

GESTURE_SWIPE_LEFT

Added in API level 16
int GESTURE_SWIPE_LEFT

用户在触摸屏上执行了一个向左滑动的手势。

常量值:3(0x00000003)

GESTURE_SWIPE_LEFT_AND_DOWN

Added in API level 16
int GESTURE_SWIPE_LEFT_AND_DOWN

用户在触摸屏上执行了向左和向下的手势。

常量值:10(0x0000000a)

GESTURE_SWIPE_LEFT_AND_RIGHT

Added in API level 16
int GESTURE_SWIPE_LEFT_AND_RIGHT

用户在触摸屏上执行了左右滑动手势。

常量值:5(0x00000005)

GESTURE_SWIPE_LEFT_AND_UP

Added in API level 16
int GESTURE_SWIPE_LEFT_AND_UP

用户在触摸屏上执行了向左和向上的手势。

常量值:9(0x00000009)

GESTURE_SWIPE_RIGHT

Added in API level 16
int GESTURE_SWIPE_RIGHT

用户在触摸屏上执行了向右滑动手势。

常量值:4(0x00000004)

GESTURE_SWIPE_RIGHT_AND_DOWN

Added in API level 16
int GESTURE_SWIPE_RIGHT_AND_DOWN

用户在触摸屏上执行了向右和向下的手势。

常量值:12(0x0000000c)

GESTURE_SWIPE_RIGHT_AND_LEFT

Added in API level 16
int GESTURE_SWIPE_RIGHT_AND_LEFT

用户在触摸屏上执行了滑动左右手势。

常数值:6(0x00000006)

GESTURE_SWIPE_RIGHT_AND_UP

Added in API level 16
int GESTURE_SWIPE_RIGHT_AND_UP

用户在触摸屏上执行了右手和上手的动作。

常量值:11(0x0000000b)

GESTURE_SWIPE_UP

Added in API level 16
int GESTURE_SWIPE_UP

用户在触摸屏上执行了向上滑动手势。

常数值:1(0x00000001)

GESTURE_SWIPE_UP_AND_DOWN

Added in API level 16
int GESTURE_SWIPE_UP_AND_DOWN

用户在触摸屏上执行了上下滑动手势。

常量值:7(0x00000007)

GESTURE_SWIPE_UP_AND_LEFT

Added in API level 16
int GESTURE_SWIPE_UP_AND_LEFT

用户在触摸屏上执行了向上和向左的手势。

常量值:13(0x0000000d)

GESTURE_SWIPE_UP_AND_RIGHT

Added in API level 16
int GESTURE_SWIPE_UP_AND_RIGHT

用户在触摸屏上执行了向上的右手势。

常量值:14(0x0000000e)

GLOBAL_ACTION_BACK

Added in API level 16
int GLOBAL_ACTION_BACK

采取行动回去。

常数值:1(0x00000001)

GLOBAL_ACTION_HOME

Added in API level 16
int GLOBAL_ACTION_HOME

行动回家。

常量值:2(0x00000002)

GLOBAL_ACTION_NOTIFICATIONS

Added in API level 16
int GLOBAL_ACTION_NOTIFICATIONS

采取行动打开通知。

常量值:4(0x00000004)

GLOBAL_ACTION_POWER_DIALOG

Added in API level 21
int GLOBAL_ACTION_POWER_DIALOG

打开电源长按对话框的动作。

常数值:6(0x00000006)

GLOBAL_ACTION_QUICK_SETTINGS

Added in API level 17
int GLOBAL_ACTION_QUICK_SETTINGS

采取措施打开快速设置。

常量值:5(0x00000005)

GLOBAL_ACTION_RECENTS

Added in API level 16
int GLOBAL_ACTION_RECENTS

切换显示近期应用程序概述的动作

常量值:3(0x00000003)

GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN

Added in API level 24
int GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN

操作切换当前应用程序的窗口

常量值:7(0x00000007)

SERVICE_INTERFACE

Added in API level 4
String SERVICE_INTERFACE

必须声明为由服务处理的 Intent

常量值:“android.accessibilityservice.AccessibilityService”

SERVICE_META_DATA

Added in API level 14
String SERVICE_META_DATA

AccessibilityService组件发布有关其自身的信息的名称。 此元数据必须引用包含<accessibility-service>标记的XML资源。 这是配置辅助功能服务的示例XML文件:

 <accessibility-service
     android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
     android:packageNames="foo.bar, foo.baz"
     android:accessibilityFeedbackType="feedbackSpoken"
     android:notificationTimeout="100"
     android:accessibilityFlags="flagDefault"
     android:settingsActivity="foo.bar.TestBackActivity"
     android:canRetrieveWindowContent="true"
     android:canRequestTouchExplorationMode="true"
     . . .
 />

常量值:“android.accessibilityservice”

SHOW_MODE_AUTO

Added in API level 24
int SHOW_MODE_AUTO

常量值:0(0x00000000)

SHOW_MODE_HIDDEN

Added in API level 24
int SHOW_MODE_HIDDEN

常数值:1(0x00000001)

Public constructors

AccessibilityService

Added in API level 4
AccessibilityService ()

Public methods

disableSelf

Added in API level 24
void disableSelf ()

禁用该服务。 调用此方法后,该服务将被禁用,并且设置将显示它已关闭。

dispatchGesture

Added in API level 24
boolean dispatchGesture (GestureDescription gesture, 
                AccessibilityService.GestureResultCallback callback, 
                Handler handler)

向触摸屏发送一个手势。 目前正在进行的任何手势,无论是来自用户,此服务还是其他服务,都将被取消。

手势将被分派,就好像它是由用户直接在屏幕上执行的一样,所以事件可能受诸如放大和通过触摸探索等特征的影响。

注意:为了发送手势,您的服务必须通过在其元数据中设置AccessibilityService_canPerformGestures属性来声明该功能。 有关更多信息,请参阅SERVICE_META_DATA

Parameters
gesture GestureDescription: The gesture to dispatch
callback AccessibilityService.GestureResultCallback: The object to call back when the status of the gesture is known. If null, no status is reported.
handler Handler: The handler on which to call back the callback object. If null, the object is called back on the service's main thread.
Returns
boolean true if the gesture is dispatched, false if not.

findFocus

Added in API level 21
AccessibilityNodeInfo findFocus (int focus)

找到具有指定焦点类型的视图。 搜索跨所有窗口执行。

注意:为了访问窗口,您的服务必须声明通过在其元数据中设置AccessibilityService_canRetrieveWindowContent属性来检索窗口内容的功能。 有关详细信息,请参阅SERVICE_META_DATA 此外,该服务必须通过设置FLAG_RETRIEVE_INTERACTIVE_WINDOWS标志来选择进入交互式窗口。 否则,搜索将仅在活动窗口中执行。

Parameters
focus int: The focus to find. One of FOCUS_INPUT or FOCUS_ACCESSIBILITY.
Returns
AccessibilityNodeInfo The node info of the focused view or null.

也可以看看:

getMagnificationController

Added in API level 24
AccessibilityService.MagnificationController getMagnificationController ()

返回放大控制器,该控制器可用于查询和修改显示放大倍率的状态。

注意:为了控制放大率,您的服务必须通过在其元数据中设置AccessibilityService_canControlMagnification属性来声明该功能。 有关更多信息,请参阅SERVICE_META_DATA

Returns
AccessibilityService.MagnificationController the magnification controller

getRootInActiveWindow

Added in API level 16
AccessibilityNodeInfo getRootInActiveWindow ()

如果此服务可以检索窗口内容,则获取当前活动窗口中的根节点。 如果用户没有触摸任何窗口,则活动窗口是用户当前正在触摸的窗口或具有输入焦点的窗口。

当前活动窗口被定义为最近解雇了以下事件之一窗口: TYPE_WINDOW_STATE_CHANGEDTYPE_VIEW_HOVER_ENTERTYPE_VIEW_HOVER_EXIT 换句话说,显示的最后一个窗口也具有输入焦点。

注意:为了访问根节点,您的服务必须通过在其元数据中设置AccessibilityService_canRetrieveWindowContent属性来声明检索窗口内容的功能。 有关详细信息,请参阅SERVICE_META_DATA

Returns
AccessibilityNodeInfo The root node if this service can retrieve window content.

getServiceInfo

Added in API level 16
AccessibilityServiceInfo getServiceInfo ()

获取一个AccessibilityServiceInfo描述此AccessibilityService 如果想在运行时更改某些动态可配置属性,此方法非常有用。

Returns
AccessibilityServiceInfo The accessibility service info.

也可以看看:

getSoftKeyboardController

Added in API level 24
AccessibilityService.SoftKeyboardController getSoftKeyboardController ()

返回软键盘控制器,可用于查询和修改软键盘显示模式。

Returns
AccessibilityService.SoftKeyboardController the soft keyboard controller

getSystemService

Added in API level 4
Object getSystemService (String name)

按名称将句柄返回到系统级服务。 返回的对象的类因所请求的名称而异。 目前可用的名称是:

WINDOW_SERVICE ("window")
The top-level window manager in which you can place custom windows. The returned object is a WindowManager.
LAYOUT_INFLATER_SERVICE ("layout_inflater")
A LayoutInflater for inflating layout resources in this context.
ACTIVITY_SERVICE ("activity")
A ActivityManager for interacting with the global activity state of the system.
POWER_SERVICE ("power")
A PowerManager for controlling power management.
ALARM_SERVICE ("alarm")
A AlarmManager for receiving intents at the time of your choosing.
NOTIFICATION_SERVICE ("notification")
A NotificationManager for informing the user of background events.
KEYGUARD_SERVICE ("keyguard")
A KeyguardManager for controlling keyguard.
LOCATION_SERVICE ("location")
A LocationManager for controlling location (e.g., GPS) updates.
SEARCH_SERVICE ("search")
A SearchManager for handling search.
VIBRATOR_SERVICE ("vibrator")
A Vibrator for interacting with the vibrator hardware.
CONNECTIVITY_SERVICE ("connection")
A ConnectivityManager for handling management of network connections.
WIFI_SERVICE ("wifi")
A WifiManager for management of Wi-Fi connectivity.
WIFI_P2P_SERVICE ("wifip2p")
A WifiP2pManager for management of Wi-Fi Direct connectivity.
INPUT_METHOD_SERVICE ("input_method")
An InputMethodManager for management of input methods.
UI_MODE_SERVICE ("uimode")
An UiModeManager for controlling UI modes.
DOWNLOAD_SERVICE ("download")
A DownloadManager for requesting HTTP downloads
BATTERY_SERVICE ("batterymanager")
A BatteryManager for managing battery state
JOB_SCHEDULER_SERVICE ("taskmanager")
A JobScheduler for managing scheduled tasks
NETWORK_STATS_SERVICE ("netstats")
A NetworkStatsManager for querying network usage statistics.
HARDWARE_PROPERTIES_SERVICE ("hardware_properties")
A HardwarePropertiesManager for accessing hardware properties.

注意:通过此API获取的系统服务可能与它们从中获取的上下文紧密相关。 一般来说,不要在各种不同的上下文(活动,应用程序,服务,提供者等)之间共享服务对象,

Parameters
name String: The name of the desired service.
Returns
Object The service or null if the name does not exist.

getWindows

Added in API level 21
List<AccessibilityWindowInfo> getWindows ()

获取屏幕上的窗口。 该方法仅返回有视力的用户可以与之交互的窗口,而不是所有的窗口。 例如,如果显示的是模态对话框,并且用户无法触摸它后面的任何对话框,则只会报告模态窗口(假设它是最高的窗口)。 为了方便起见,返回的窗口以降序图层顺序排列,这是首先报告Z顺序较高的窗口。 由于用户总是可以通过键入与具有输入焦点的窗口进行交互,所以始终返回聚焦的窗口(即使被模态窗口覆盖)。

注意:为了访问窗口,您的服务必须声明通过在其元数据中设置AccessibilityService_canRetrieveWindowContent属性来检索窗口内容的功能。 有关详细信息,请参阅SERVICE_META_DATA 此外,该服务必须通过设置FLAG_RETRIEVE_INTERACTIVE_WINDOWS标志来选择通过交互式窗口来检索。

Returns
List<AccessibilityWindowInfo> The windows if there are windows and the service is can retrieve them, otherwise an empty list.

onAccessibilityEvent

Added in API level 4
void onAccessibilityEvent (AccessibilityEvent event)

回调 AccessibilityEvent s。

Parameters
event AccessibilityEvent: The new event. This event is owned by the caller and cannot be used after this method returns. Services wishing to use the event after this method returns should make a copy.

onBind

Added in API level 4
IBinder onBind (Intent intent)

实现返回内部辅助功能服务接口的实现。

Parameters
intent Intent: The Intent that was used to bind to this service, as given to Context.bindService. Note that any extras that were included with the Intent at that point will not be seen here.
Returns
IBinder Return an IBinder through which clients can call on to the service.

onInterrupt

Added in API level 4
void onInterrupt ()

回调中断可访问性反馈。

performGlobalAction

Added in API level 16
boolean performGlobalAction (int action)

执行全局操作。 无论当前应用程序或用户在该应用程序中的位置如何,都可以随时执行此类操作。 例如回去,回家,打开最近的东西等等。

Parameters
action int: The action to perform.
Returns
boolean Whether the action was successfully performed.

也可以看看:

setServiceInfo

Added in API level 4
void setServiceInfo (AccessibilityServiceInfo info)

设置描述此服务的 AccessibilityServiceInfo

注意:您可以随时调用此方法,但在系统绑定到此服务并且此后调用此方法后,将会收集信息。

Parameters
info AccessibilityServiceInfo: The info.

Protected methods

onGesture

Added in API level 16
boolean onGesture (int gestureId)

当用户在触摸屏上执行特定手势时由系统调用。 注意:要接收手势,辅助功能服务必须通过设置FLAG_REQUEST_TOUCH_EXPLORATION_MODE标志来请求设备处于触摸探索模式。

Parameters
gestureId int: The unique id of the performed gesture.
Returns
boolean Whether the gesture was handled.

也可以看看:

onKeyEvent

Added in API level 18
boolean onKeyEvent (KeyEvent event)

允许无障碍服务在传递给系统其余部分之前观察关键事件的回调。 这意味着事件在传递到设备策略,输入方法或应用程序之前首先在这里传递。

注意:关键事件的处理方式非常重要,以便传递给系统其余部分的事件流格式良好。 例如,处理down事件但不处理up事件,反之亦然会产生不一致的事件流。

注意:此方法中传递的关键事件是副本,并且修改它们将不会影响将传递到系统的事件。 此方法旨在执行纯粹的过滤功能。

Parameters
event KeyEvent: The event to be processed. This event is owned by the caller and cannot be used after this method returns. Services wishing to use the event after this method returns should make a copy.
Returns
boolean If true then the event will be consumed and not delivered to applications, otherwise it will be delivered as usual.

onServiceConnected

Added in API level 4
void onServiceConnected ()

此方法是AccessibilityService生命周期的一部分,在系统成功绑定到服务后调用。 如果方便使用此方法设置AccessibilityServiceInfo

也可以看看:

Hooray!