public abstract class AccessibilityService
extends Service
java.lang.Object | ||||
↳ | android.content.Context | |||
↳ | android.content.ContextWrapper | |||
↳ | android.app.Service | |||
↳ | android.accessibilityservice.AccessibilityService |
辅助功能服务旨在帮助残障用户使用Android设备和应用。 他们在后台运行并在系统AccessibilityEvent
时收到系统回AccessibilityEvent
。 这样的事件表示用户界面中的一些状态转换,例如焦点已经改变,按钮被点击等。这种服务可以可选地请求查询活动窗口的内容的能力。 开发无障碍服务需要扩展这个类并实现其抽象方法。
有关创建AccessibilityServices的更多信息,请阅读 Accessibility开发人员指南。
无障碍服务的生命周期仅由系统管理,并遵循既定的服务生命周期。 启动无障碍服务是由用户明确地在设备设置中启用服务来触发的。 系统绑定到服务后,它调用onServiceConnected()
。 此方法可以被想要执行后绑定设置的客户端重写。
当用户在设备设置中关闭辅助功能时,或者在拨打 disableSelf()
时,无障碍服务停止。
可访问性被声明为AndroidManifest.xml中的任何其他服务,但它必须做两件事:
Intent
.
BIND_ACCESSIBILITY_SERVICE
permission to ensure that only the system can bind to it.
<service android:name=".MyAccessibilityService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> . . . </service>
可访问性服务可配置为接收特定类型的辅助功能事件,仅侦听特定的包,在给定的时间范围内仅从每种类型获取事件一次,检索窗口内容,指定设置活动等。
有两种配置无障碍服务的方法:
meta-data
entry in the manifest when declaring the service. A service declaration with a meta-data tag is presented below: <service android:name=".MyAccessibilityService"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" /> </service>
注意:这种方法可以设置所有属性。
有关更多详细信息,请参阅 SERVICE_META_DATA
和 <
。accessibility-service
>
setServiceInfo(AccessibilityServiceInfo)
. Note that this method can be called any time to dynamically change the service configuration. 注意:此方法使设置只动态配置属性: eventTypes
, feedbackType
, flags
, notificationTimeout
, packageNames
有关更多详细信息,请参阅 AccessibilityServiceInfo
。
服务可以在声明中指定它可以检索窗口内容,该窗口内容以AccessibilityWindowInfo
和AccessibilityNodeInfo
对象的树表示。 请注意,声明此功能需要该服务通过SERVICE_META_DATA
引用的XML资源声明其配置。
窗口内容可以与被检索 AccessibilityEvent.getSource()
, findFocus(int)
, getWindows()
,或 getRootInActiveWindow()
。
注意可访问性服务可能已请求通知一部分事件类型,因此在节点层次结构发生更改时不知道。 节点也可能包含过时的信息,因为窗口内容可能随时发生变化。
无论其反馈类型如何,所有无障碍服务都会收到所有已请求事件的通知。
注意事件通知超时对于避免将事件传播到客户端非常有用,因为这是通过昂贵的进程间调用完成的。 人们可以将超时作为确定事件发生何时平息的标准。
TYPE_VIEW_CLICKED
TYPE_VIEW_LONG_CLICKED
TYPE_VIEW_FOCUSED
TYPE_VIEW_SELECTED
TYPE_VIEW_TEXT_CHANGED
TYPE_WINDOW_STATE_CHANGED
TYPE_NOTIFICATION_STATE_CHANGED
TYPE_TOUCH_EXPLORATION_GESTURE_START
TYPE_TOUCH_EXPLORATION_GESTURE_END
TYPE_VIEW_HOVER_ENTER
TYPE_VIEW_HOVER_EXIT
TYPE_VIEW_SCROLLED
TYPE_VIEW_TEXT_SELECTION_CHANGED
TYPE_WINDOW_CONTENT_CHANGED
TYPE_ANNOUNCEMENT
TYPE_GESTURE_DETECTION_START
TYPE_GESTURE_DETECTION_END
TYPE_TOUCH_INTERACTION_START
TYPE_TOUCH_INTERACTION_END
TYPE_VIEW_ACCESSIBILITY_FOCUSED
TYPE_WINDOWS_CHANGED
TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED
Nested classes |
|
---|---|
class |
AccessibilityService.GestureResultCallback 用于报告已分派手势状态的类 |
class |
AccessibilityService.MagnificationController 用于控制和查询显示放大倍数的状态。 |
class |
AccessibilityService.SoftKeyboardController 用于控制和查询软键盘显示模式。 |
Inherited constants |
---|
From class android.app.Service
|
From class android.content.Context
|
From interface android.content.ComponentCallbacks2
|
Public constructors |
|
---|---|
AccessibilityService() |
Protected methods |
|
---|---|
boolean |
onGesture(int gestureId) 当用户在触摸屏上执行特定手势时由系统调用。 |
boolean |
onKeyEvent(KeyEvent event) 允许无障碍服务在传递给系统其余部分之前观察关键事件的回调。 |
void |
onServiceConnected() 此方法是 |
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
|
int GESTURE_SWIPE_DOWN_AND_LEFT
用户在触摸屏上执行了向下和向左的手势。
常量值:15(0x0000000f)
int GESTURE_SWIPE_DOWN_AND_RIGHT
用户在触摸屏上执行了向下和向右的手势。
常量值:16(0x00000010)
int GESTURE_SWIPE_DOWN_AND_UP
用户在触摸屏上执行了向下和向上滑动手势。
常量值:8(0x00000008)
int GESTURE_SWIPE_LEFT
用户在触摸屏上执行了一个向左滑动的手势。
常量值:3(0x00000003)
int GESTURE_SWIPE_LEFT_AND_DOWN
用户在触摸屏上执行了向左和向下的手势。
常量值:10(0x0000000a)
int GESTURE_SWIPE_LEFT_AND_RIGHT
用户在触摸屏上执行了左右滑动手势。
常量值:5(0x00000005)
int GESTURE_SWIPE_LEFT_AND_UP
用户在触摸屏上执行了向左和向上的手势。
常量值:9(0x00000009)
int GESTURE_SWIPE_RIGHT
用户在触摸屏上执行了向右滑动手势。
常量值:4(0x00000004)
int GESTURE_SWIPE_RIGHT_AND_DOWN
用户在触摸屏上执行了向右和向下的手势。
常量值:12(0x0000000c)
int GESTURE_SWIPE_RIGHT_AND_LEFT
用户在触摸屏上执行了滑动左右手势。
常数值:6(0x00000006)
int GESTURE_SWIPE_RIGHT_AND_UP
用户在触摸屏上执行了右手和上手的动作。
常量值:11(0x0000000b)
int GESTURE_SWIPE_UP_AND_DOWN
用户在触摸屏上执行了上下滑动手势。
常量值:7(0x00000007)
int GESTURE_SWIPE_UP_AND_LEFT
用户在触摸屏上执行了向上和向左的手势。
常量值:13(0x0000000d)
int GESTURE_SWIPE_UP_AND_RIGHT
用户在触摸屏上执行了向上的右手势。
常量值:14(0x0000000e)
int GLOBAL_ACTION_NOTIFICATIONS
采取行动打开通知。
常量值:4(0x00000004)
int GLOBAL_ACTION_POWER_DIALOG
打开电源长按对话框的动作。
常数值:6(0x00000006)
int GLOBAL_ACTION_QUICK_SETTINGS
采取措施打开快速设置。
常量值:5(0x00000005)
int GLOBAL_ACTION_RECENTS
切换显示近期应用程序概述的动作
常量值:3(0x00000003)
int GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN
操作切换当前应用程序的窗口
常量值:7(0x00000007)
String SERVICE_INTERFACE
必须声明为由服务处理的 Intent
。
常量值:“android.accessibilityservice.AccessibilityService”
String SERVICE_META_DATA
AccessibilityService组件发布有关其自身的信息的名称。 此元数据必须引用包含<
标记的XML资源。 这是配置辅助功能服务的示例XML文件:accessibility-service
>
<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”
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. |
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. |
也可以看看:
AccessibilityService.MagnificationController getMagnificationController ()
返回放大控制器,该控制器可用于查询和修改显示放大倍率的状态。
注意:为了控制放大率,您的服务必须通过在其元数据中设置AccessibilityService_canControlMagnification
属性来声明该功能。 有关更多信息,请参阅SERVICE_META_DATA
。
Returns | |
---|---|
AccessibilityService.MagnificationController |
the magnification controller |
AccessibilityNodeInfo getRootInActiveWindow ()
如果此服务可以检索窗口内容,则获取当前活动窗口中的根节点。 如果用户没有触摸任何窗口,则活动窗口是用户当前正在触摸的窗口或具有输入焦点的窗口。
当前活动窗口被定义为最近解雇了以下事件之一窗口: TYPE_WINDOW_STATE_CHANGED
, TYPE_VIEW_HOVER_ENTER
, TYPE_VIEW_HOVER_EXIT
。 换句话说,显示的最后一个窗口也具有输入焦点。
注意:为了访问根节点,您的服务必须通过在其元数据中设置AccessibilityService_canRetrieveWindowContent
属性来声明检索窗口内容的功能。 有关详细信息,请参阅SERVICE_META_DATA
。
Returns | |
---|---|
AccessibilityNodeInfo |
The root node if this service can retrieve window content. |
AccessibilityServiceInfo getServiceInfo ()
获取一个AccessibilityServiceInfo
描述此AccessibilityService
。 如果想在运行时更改某些动态可配置属性,此方法非常有用。
Returns | |
---|---|
AccessibilityServiceInfo |
The accessibility service info. |
也可以看看:
AccessibilityService.SoftKeyboardController getSoftKeyboardController ()
返回软键盘控制器,可用于查询和修改软键盘显示模式。
Returns | |
---|---|
AccessibilityService.SoftKeyboardController |
the soft keyboard controller |
Object getSystemService (String name)
按名称将句柄返回到系统级服务。 返回的对象的类因所请求的名称而异。 目前可用的名称是:
WINDOW_SERVICE
("window")
WindowManager
.
LAYOUT_INFLATER_SERVICE
("layout_inflater")
LayoutInflater
for inflating layout resources in this context.
ACTIVITY_SERVICE
("activity")
ActivityManager
for interacting with the global activity state of the system.
POWER_SERVICE
("power")
PowerManager
for controlling power management.
ALARM_SERVICE
("alarm")
AlarmManager
for receiving intents at the time of your choosing.
NOTIFICATION_SERVICE
("notification")
NotificationManager
for informing the user of background events.
KEYGUARD_SERVICE
("keyguard")
KeyguardManager
for controlling keyguard.
LOCATION_SERVICE
("location")
LocationManager
for controlling location (e.g., GPS) updates.
SEARCH_SERVICE
("search")
SearchManager
for handling search.
VIBRATOR_SERVICE
("vibrator")
Vibrator
for interacting with the vibrator hardware.
CONNECTIVITY_SERVICE
("connection")
ConnectivityManager
for handling management of network connections.
WIFI_SERVICE
("wifi")
WifiManager
for management of Wi-Fi connectivity.
WIFI_P2P_SERVICE
("wifip2p")
WifiP2pManager
for management of Wi-Fi Direct connectivity.
INPUT_METHOD_SERVICE
("input_method")
InputMethodManager
for management of input methods.
UI_MODE_SERVICE
("uimode")
UiModeManager
for controlling UI modes.
DOWNLOAD_SERVICE
("download")
DownloadManager
for requesting HTTP downloads
BATTERY_SERVICE
("batterymanager")
BatteryManager
for managing battery state
JOB_SCHEDULER_SERVICE
("taskmanager")
JobScheduler
for managing scheduled tasks
NETWORK_STATS_SERVICE
("netstats")
NetworkStatsManager
for querying network usage statistics.
HARDWARE_PROPERTIES_SERVICE
("hardware_properties")
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. |
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. |
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. |
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. |
boolean performGlobalAction (int action)
执行全局操作。 无论当前应用程序或用户在该应用程序中的位置如何,都可以随时执行此类操作。 例如回去,回家,打开最近的东西等等。
Parameters | |
---|---|
action |
int : The action to perform. |
Returns | |
---|---|
boolean |
Whether the action was successfully performed. |
void setServiceInfo (AccessibilityServiceInfo info)
设置描述此服务的 AccessibilityServiceInfo
。
注意:您可以随时调用此方法,但在系统绑定到此服务并且此后调用此方法后,将会收集信息。
Parameters | |
---|---|
info |
AccessibilityServiceInfo : The info. |
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. |
也可以看看:
GESTURE_SWIPE_UP
GESTURE_SWIPE_UP_AND_LEFT
GESTURE_SWIPE_UP_AND_DOWN
GESTURE_SWIPE_UP_AND_RIGHT
GESTURE_SWIPE_DOWN
GESTURE_SWIPE_DOWN_AND_LEFT
GESTURE_SWIPE_DOWN_AND_UP
GESTURE_SWIPE_DOWN_AND_RIGHT
GESTURE_SWIPE_LEFT
GESTURE_SWIPE_LEFT_AND_UP
GESTURE_SWIPE_LEFT_AND_RIGHT
GESTURE_SWIPE_LEFT_AND_DOWN
GESTURE_SWIPE_RIGHT
GESTURE_SWIPE_RIGHT_AND_UP
GESTURE_SWIPE_RIGHT_AND_LEFT
GESTURE_SWIPE_RIGHT_AND_DOWN
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. |
void onServiceConnected ()
此方法是AccessibilityService
生命周期的一部分,在系统成功绑定到服务后调用。 如果方便使用此方法设置AccessibilityServiceInfo
。