• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

Android

辅助功 AccessibilityService条记(3)

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0921/652.html

 
 
Android AccessibilityService 辅助功效
 
1、媒介
 
Android的辅助功效是个对照老的API(since API 4),但是该API真确首先开展或是在API 16~19(许多常用的方法参数都是在这几个版本渐渐进来以及完善的)版本中。辅助功效咱们非常多见的是在相似深度休眠,抢红包中使用,模仿点击屏幕view。这次写关于辅助功效的分享是由于在API 24、 API 26中,又增加了几个类以及几个接口。
 
 
 
常州网站开发建设本文首先介绍关于辅助功效的多见使用方法,然后首先介绍辅助功效新增接口以及类的使用。
 
 
 
2、辅助功效的使用
 
2.1 辅助功效通例使用方法:###
 
本小结介绍普通情况下辅助功效的使用(基础用法和方法释义较多,要是需求阅览API > 20 新增方法使用请从2.2首先阅读),API level在20及以下的使用方法。不涉及新增的方法以及类的使用介绍。
 
 
 
2.1.1 使用流程:####
 
 
 
1、Service: 配置本人的辅助功服无(注册、配置)
 
 
 
2、Class: 本人的辅助功效类(对事件的阻挡、处理)
 
 
 
2.1.2 Service配置:####
 
 
 
1、在实例化的辅助功效类中:onServiceConnected()中初始化,以下所示。
 
 
 
@Override
 
protected void onServiceConnected() {
 
    super.onServiceConnected();
 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
 
    info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
 
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
 
    info.notificationTimeout = 100;
 
    info.packageNames = new String[]{"...", "..."};
 
    info.flags = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
 
    setServiceInfo(info);
 
}
 
2、使用manifest中增加meta-data的方法(该方法从API 14首先使用)
 
 
 
<?xml version="1.0" encoding="utf-8"?>
 
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
 
    android:accessibilityEventTypes=""
 
    android:accessibilityFeedbackType=""
 
    android:accessibilityFlags=""
 
    android:canRequestEnhancedWebAccessibility=""
 
    android:canRequestFilterKeyEvents=""
 
    android:canRequestTouchExplorationMode=""
 
    android:canRetrieveWindowContent=""
 
    android:description=""
 
    android:notificationTimeout=""
 
    android:packageNames=""
 
    android:settingsActivity=""
 
    android:summary="" />
 
由上边两组代码能够看到,前一个配置中单个代码块中,配置属性有限,但灵活的在服无里边初始化,使咱们能够随时的改变需求的flag和type及少许其余参数。而后一个(Android 4.0+ / API 14+)的meta-data配置方法,可配置的属性更多。在体系条件符合时(同时不需求变动咱们辅助功效的少许参数时),或是保举使用后一个配置方法进行辅助功效的配置。
 
 
 
2.1.3 AccessibilityServiceInfo 配置参数:####
 
 
 
这里只是对全部的XML attributes进行分析。
 
 
 
XML attributes:
 
 
 
AccessibilityEventTypes 此服无有望汲取的事件范例
 
constant value 形貌
 
typeAllMask ffffffff 全部范例的事件
 
typeAnnouncement 4000 一个运用发生一个关照事件
 
typeAssistReadingContext 1000000 辅助用户读取目前屏幕事件
 
typeContextClicked 800000 view中高低文点击事件
 
typeGestureDetectionEnd 80000 监测到的手势事件实现
 
typeGestureDetectionStart 40000 首先手势监测事件
 
typeNotificationStateChanged 40 收到notification弹出消息事件
 
typeTouchExplorationGestureEnd 400 触摸涉猎事件实现
 
typeTouchExplorationGestureStart 200 触摸涉猎事件首先
 
typeTouchInteractionEnd 200000 用户触屏事件收场
 
typeTouchInteractionStart 100000 触摸屏幕事件首先
 
typeViewAccessibilityFocusCleared 10000 无停滞核心事件肃清
 
typeViewAccessibilityFocused 8000 获得无停滞的核心事件
 
typeViewClicked 1 点击事件
 
typeViewFocused 8 view获得到核心事件
 
typeViewHoverEnter 80 一个view的悬停事件
 
typeViewHoverExit 100 一个view的悬停事件收场,悬停脱离该view
 
typeViewLongClicked 2 view的长按事件
 
typeViewScrolled 1000 view的转动事件,adapterview、scrollview
 
typeViewSelected 4 view选中,普通是具备选中属性的view,比方adapter
 
typeViewTextChanged 10 edittext中笔墨发生改变的事件
 
typeViewTextSelectionChanged 2000 edittext笔墨选中发生改变事件
 
typeViewTextTraversedAtMovementGranularity 20000 UIanimator中在一个视图文本中进行遍历会发生这个事件,多个粒度遍历文本。普通用于语音阅读context
 
typeWindowContentChanged 800 窗口的内容发生变更,大概更详细的子树根布局变更事件
 
typeWindowStateChanged 20 新的弹出层导致的窗口变更(dialog、menu、popupwindow)
 
typeWindowsChanged 400000 屏幕上的窗口变更事件,需求API 21+
 
accessibilityFeedbackType 此服无提供的反应范例
 
constant value 形貌
 
feedbackAllMask ffffffff 作废全部的可用反应方法
 
feedbackAudible 4 可听见的(非语音反应)
 
feedbackGeneric 10 通用反应
 
feedbackHaptic 2 触觉反应(触动)
 
feedbackSpoken 1 语音反应
 
feedbackVisual 8 视觉反应
 
accessibilityFlags 辅助功效附加的标记,多个使用 ' | '分开
 
constant value 形貌
 
flagDefault 1 默认的配置
 
flagEnableAccessibilityVolume 80 这个标记要求体系内全部的音频通道,使用由STREAM_ACCESSIBILTY音量掌握USAGE_ASSISTANCE_ACCESSIBILITY
 
flagIncludeNotImportantViews 2 表示可获得到少许被表示为辅助功效无权获得到的view
 
flagReportViewIds 10 使用该flag表示可获得到view的ID
 
flagRequestAccessibilityButton 100 要是辅助功效可用,提供一个辅助功效按钮在体系的导航栏 API 26+
 
flagRequestEnhancedWebAccessibility 8 此类扩大的目标是为WebView中发现的内容提供更好的辅助功效支持。这种扩大的一个例子是从一个平安的来源注入JavaScript。要是起码有一个具备此标记的辅助功效服无, 则体系将使能加强的web辅助功效。是以, 肃清此标记并不保证该建筑不会使能加强的web辅助功效, 由于大概有另一个使能的服无在使用它。
 
flagRequestFilterKeyEvents 20 能够监听到体系的物理按键
 
flagRequestFingerprintGestures 200 监听体系的指纹手势 API 26+
 
flagRequestTouchExplorationMode 4 体系进来触控探索模式。发现一个鼠标在用户的界面
 
flagRetrieveInteractiveWindows 40 该标记常识的辅助服无要走访全部交互式窗口内容的体系,这个标记没有被配置时,服无不会收到TYPE_WINDOWS_CHANGE事件。
 
canRequestEnhancedWebAccessibility (boolean)
 
辅助功效服无是否能够要求WEB辅助加强的属性。比方: 安置剧本以使运用程序内容更易于走访。
 
 
 
canRequestFilterKeyEvents (boolean)
 
辅助功效服无是否能够要求过滤KeyEvent的属性,是否能够要求KeyEvent事件流。,flagRequestFilterKeyEvents搭配使用
 
 
 
canRequestTouchExplorationMode (boolean)
 
此属性用于,能够让辅助功效服无经历手势,来要求触摸涉猎模式,其被触摸的项,将被朗读出来,flagRequestTouchExplorationMode搭配使用
 
 
 
canRetrieveWindowContent (boolean)
 
辅助功效服无是否能够取回举止窗口内容的属性。 与上边的flagRetrieveInteractiveWindows搭配使用,无法在运转时变动此配置。
 
 
 
description
 
辅助功效服无目标或行为的简略形貌。
 
 
 
notificationTimeout
 
同一范例的两个辅助功效事件发送到服无的非常短隔断(毫秒,两个辅助功效事件之间的非常小周期)
 
 
 
packageNames
 
今后服无能汲取到事件的软件包名称 (不适用全部软件包)(多个软件包用逗号分开)。
 
 
 
settingsActivity
 
容许游戏开发运营用户点窜辅助功效的activity组件名称
 
 
 
summary
 
同description
 
 
 
2.1.4 实现本人的辅助功效类:####
 
 
 
首先需求打听的是AccessibilityService这个类。
 
 
 
Public方法有:
 
 
 
Method 形貌
 
API 20  
 
getRootInActiveWindow() 获得窗体中的节点信息。 返回 AccessibilityNodeInfo
 
getServiceInfo() 获得本服无的配置信息。 返回 AccessibilityServiceInfo
 
getSystemService(String name) 经历服无名获得对应的体系服无。 返回 Object
 
onAccessibilityEvent(AccessibilityEvent event) 辅助功效事件(s)回调方法
 
onBind(Intent intent) service的bind接口
 
onInterrupt() 辅助功效中缀的回调
 
performGlobalAction(int action) 全局的点击方法
 
setServiceInfo(AccessibilityServiceInfo info) 配置该辅助功效服无的形貌,点窜辅助功效的配置。可经历搭配使用getServiceInfo()动静点窜咱们辅助功效的配置
 
API 21新增:  
 
getWindows() 返回窗口非常上层的一个用户可交互的窗口信息节点 List<AccessibilityWindowInfo>
 
API 24新增:  
 
disableSelf() 封闭本人service的方法,在配置界面能够看到辅助功效状况被封闭
 
getSoftKeyboardController() 返回软键盘掌握器,可用于盘问和点窜软键盘表现模式。
 
findFocus(int focus) 找到具备指定核心范例的视图。搜刮在全部窗口中实行。留意:为了走访Windows,您的服无必需经历在其元数据中配置AccessibilityService_canRetrieveWindowContent属性来说明检索窗口内容的功效。有关详细信息,请参阅SERVICE_META_DATA。别的,服无必需选定经历配置FLAG_RETRIEVE_INTERACTIVE_WINDOWS标记来检索交互式窗口。否则,搜刮将仅在举止窗口中实行。
 
getMagnificationController() 返回放大掌握器,可用于盘问和点窜表现放大的状况。留意:为了掌握放大倍数,您的服无必需经历在其元数据中配置AccessibilityService_canControlMagnification属性来说明该功效
 
dispatchGesture(GestureDescription ge, GestureResultCallback cb, Handler handler) 将手势发送到触摸屏。目前正在进行的任何手势(无论是从用户,本服无或是其余服无)将被作废。 手势将被调剂,就像在用户干脆在屏幕上实行的同样,是以事件大概会受到诸如放大和触摸探索之类的功效的影响。
 
API 26新增:  
 
getAccessibilityButtonController() 返回体系导航区域中可走访性按钮的掌握器。当配置FLAG_REQUEST_ACCESSIBILITY_BUTTON时,此实例可用于盘问辅助功效按钮的状况并注册监听器以进行交互和辅助功效按钮的状况变动。返回 AccessibilityButtonController
 
getFingerprintGestureController() 获得掌握器的指纹手势。此功效需求 AccessibilityServiceInfo#CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES。留意:在调用此方法之前,必需先启动该服无。返回 FingerprintGestureController
 
这片面咱们只针对API <= 20片面的代码,其中咱们常用的方法有:
 
 
 
Method 形貌
 
getRootInActiveWindow() 获得窗体中的节点信息 AccessibilityNodeInfo,要是需求使用该方法,咱们需求在配置中说明 canRetrieveWindowContent,否则大概获得不到窗体的节点信息。AccessibilityNodeInfo
 
onAccessibilityEvent(AccessibilityEvent event) 辅助功效事件(s)回调方法,处理辅助功效内全部事件的回调方法
 
performGlobalAction(int action) 全局的点击方法
 
在使用这些方法时,有三个需求咱们打听的地方:
 
 
 
AccessibilityEvent 在辅助功效event回调方法中,返回的参数。(官方API En)
 
AccessibilityNodeInfo 辅助功效中的节点对象(nodeInfo)。(官方API En)
 
performGlobalAction(action) 全局事件发送方法(物理按键的点击)
 
AccessibilityEvent
 
 
 
当用户界面发生某些明显的事件时,AccessibilityEvent代表的无停滞事件会被体系发送,每一种事件范例是由该类露出出的属性质集表示其特性的。在此类中为每一种事件范例定义了响应的常量。详细的事件范例请参照AccessibilityEvent文档 Zh。
 
 
 
Public Methods 共有方法:
 
 
 
Method 形貌
 
appendRecord(AccessibilityRecordrecord) 将AccessibilityRecord(AccessibilityRecord使用pdf文档 Zh)追加到事件记录的结尾。
 
getRecord(int index) 获得给定索引下的记录。
 
getRecordCount() 获得被包含在事件中的记录数。
 
describeContents() 形貌被包含在 Parcelable 实例的编组表示中的分外对象品种。比方,要是对象在 writeToParcel(Parcel, int)的输出里包含一个文件形貌符,该方法的返回值必需包含 CONTENTS_FILE_DESCRIPTOR 位。
 
getEventType() 获得事件范例。
 
setEventType(int eventType) 配置事件范例。
 
eventTypeToString(int eventType) 返回一个事件范例的字符串表示。比方,TYPE_VIEW_CLICKED 的字符串表示为“TYPE_VIEW_CLICKED”。
 
getAction() 获得触发该事件的实行操纵。
 
getContentChangeTypes() 获得由 TYPE_WINDOW_CONTENT_CHANGED 事件标识的改变范例的位掩码。一个单纯事件大概代表多种变更范例。
 
getEventTime() 获得该事件的发送光阴。
 
setEventTime(long eventTime) 配置事件被发送的光阴。
 
getMovementGranularity() 获得遍历的挪动粒度。
 
setMovementGranularity(int granularity) 配置遍历的挪动粒度。
 
getPackageName() 获得源的包名。
 
setPackageName(CharSequence packageName) 配置源的包名。
 
initFromParcel(Parcel parcel) 从 Parcel 建立一个新实例。
 
obtain(AccessibilityEvent event) 要是可获得,返回一个缓存实例或建立一个新实例。返回实例从给定事件初始化。
 
obtain() 要是可获得,返回一个缓存实例或实例化一个新的。
 
obtain(int eventType) 要是可获得,返回一个缓存实例或实例化一个新的并配置它的范例属性。
 
recycle() 接管一个实例重叠使用。
 
setAction(int action) 配置触发此事件的实行操纵。
 
setContentChangeTypes(int changeTypes) 配置由一个 TYPE_WINDOW_CONTENT_CHANGED 事件标识的节点树改变的位掩码。
 
toString() 返回对象的字符串表示。普通情况下,toString 方法返回一个“文本表示”该对象的字符串。后果应该是一个简洁但容易阅读的信息表示。建议全部子类重写该方法。
 
writeToParcel(Parcel parcel, int flags) 整组该对象到一个 Parcel。
 
AccessibilityNodeInfo####
 
 
 
常州手游开发该类代表一个窗口内容节点和能够从源要求的操纵。从 AccessibilityService的角度看,一个窗口内容被发现为一个无停滞节点信息树,该树大概与视图档次逐一映射,也大概不与视图档次逐一映射。换句话说,一个自定义视图可灵活地将本人汇报为一个无停滞节点信息树。一旦无停滞节点信息被发送给无停滞服无,该信息将会是不可改变的,且调用状况改变方法将会发生错误。AccessibilityNodeInfo文档 Zh
 
 
 
嵌套类:
 
 
 
AccessibilityNodeInfo.AccessibilityAction API 21+
 
定义了一个能够在 AccessibilityNodeInfo 上实行的操纵的类。
 
 
 
AccessibilityNodeInfo.CollectionInfo
 
具备一个节点是否是个鸠合的信息的类。
 
 
 
AccessibilityNodeInfo.CollectionItemInfo
 
具备一个节点是否是个鸠合项目标信息的类。
 
 
 
AccessibilityNodeInfo.RangeInfo
 
具备一个节点是否是个局限的信息的类。
 
 
 
常量:
 
使用nodeInfo.performAction(Int Action)、performAction(Int Action, Bundle bundle)方法
 
 
 
Action 释义
 
ACTION_ACCESSIBILITY_FOCUS 给节点增加无停滞核心的操纵。
 
ACTION_ARGUMENT_COLUMN_INT 让指定鸠合列在屏幕上可见的参数。
 
ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN 当以一定粒度挪动时,是否扩大选定局限或反之移除的参数。
 
ACTION_ARGUMENT_HTML_ELEMENT_STRING 要挪动到的下一个/上一个 HTML 元素的参数。
 
ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT 当遍历节点文本的时,使用类挪动粒度的参数。。
 
ACTION_ARGUMENT_PROGRESS_VALUE 指定要配置的进度值的参数。
 
ACTION_ARGUMENT_ROW_INT 让指定鸠合行在屏幕上可见的参数。
 
ACTION_ARGUMENT_SELECTION_END_INT 指定选定收场的参数。
 
ACTION_ARGUMENT_SELECTION_START_INT 指定选定肇始的参数。
 
ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE 指定要配置的文本内容的参数。
 
ACTION_CLEAR_ACCESSIBILITY_FOCUS 肃清节点无停滞核心的操纵。
 
ACTION_CLEAR_FOCUS 肃清节点输入核心的操纵。
 
ACTION_CLEAR_SELECTION 作废选定节点的操纵。
 
ACTION_NEXT_AT_MOVEMENT_GRANULARITY 以给定挪动粒度,要求去到该节点文本的下一个文本实体的操纵。
 
ACTION_CLICK 在节点信息上点击的操纵.
 
ACTION_COLLAPSE 折叠一个可睁开节点的操纵。
 
ACTION_COPY 将目前选定拷贝到剪贴板的操纵。
 
ACTION_CUT 剪贴目前选项并放置到剪贴板的操纵。
 
ACTION_DISMISS 封闭一个可封闭节点的操纵。
 
ACTION_EXPAND 睁开一个可睁开节点的操纵。
 
ACTION_FOCUS 给节点增加输入核心的操纵。
 
ACTION_LONG_CLICK 在节点上点击长按的操纵。
 
ACTION_NEXT_HTML_ELEMENT 挪动到给定范例的下一个 HTML 元素的操纵。比方,挪动到 BUTTON、INPUT、TABLE 等。
 
ACTION_PASTE 粘贴目前剪贴板内容的操纵。
 
ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY 以给定挪动粒度,要求去到该节点文本的上一个文本实体的操纵。比方,挪动到下一个字、词等。
 
ACTION_PREVIOUS_HTML_ELEMENT 挪动到给定范例的上一个 HTML 元素的操纵。比方,挪动到BUTTON、INPUT、TABLE 等。
 
ACTION_SCROLL_BACKWARD 向后转动节点内容的操纵。
 
ACTION_SCROLL_FORWARD 向前转动节点内容的操纵
 
ACTION_SELECT 选定节点的操纵。
 
ACTION_SET_SELECTION 配置选定项的操纵。实行该操纵,而且无参数肃清选项
 
ACTION_SET_TEXT 配置节点文本的操纵。在没有参数的情况下实行该操纵,使用 null 大概空CharSequence 将会肃清文本。该操纵也将会把光标放置到文本末端
 
FOCUS_ACCESSIBILITY 无停滞核心。
 
FOCUS_INPUT 输入核心。
 
MOVEMENT_GRANULARITY_CHARACTER 以字符为挪动粒度位,遍历节点文本
 
MOVEMENT_GRANULARITY_LINE 以行为挪动粒度位,遍历节点文本。
 
MOVEMENT_GRANULARITY_PAGE 以页为挪动粒度位,遍历节点文本。
 
MOVEMENT_GRANULARITY_PARAGRAPH 以段为挪动粒度位,遍历节点文本。
 
MOVEMENT_GRANULARITY_WORD 以字词为挪动粒度位,遍历节点文本。
 
方法:
 
 
 
Public Method 释义
 
addAction(int action) 为一个nodeInfo增加一个操纵,在API 21时被弃用
 
addAction(AccessibilityNodeInfo.AccessibilityAction action) 为一个nodeInfo增加一个操纵,API 21
 
addChild(View root, int virtualDescendantId) 增加一个虚拟子元素,作为给定根节点的子view
 
addChild(View child) 增加一个子view节点。
 
canOpenPopup() 获得该节点是否能够翻开一个弹窗或对话框。
 
describeContents() 形貌被包含在可打包实例的封装代表中的分外对象的品种。
 
equals(Object object) 标识是否有某些其余对象“等同于”该对象。
 
findAccessibilityNodeInfosByText(String text) 使用文本找到 AccessibilityNodeInfo。
 
findAccessibilityNodeInfosByViewId(String viewId) 使用彻底及格视图id的源名称找到AccessibilityNodeInfo,彻底及格 id 的样式 以下“package:id/id_resource_name”。
 
findFocus(int focus) 找到具备指定核心范例的视图。
 
focusSearch(int direction) 在指定方向搜刮具备输入核心的近来的视图。
 
getActionList() 获得能够在该节点上实行的操纵。
 
getActions() 该方法在 API 级别 21 被弃用。使用getActionList()取代。
 
getBoundsInParent(Rect outBounds) 获得父级坐标中的节点界限。
 
getBoundsInScreen(Rect outBounds) 获得屏幕坐标中的节点界限。
 
getChild(int index) 获得给定索引下的子元素。
 
getChildCount() 获得子元素的数目。
 
getClassName() 获得该节点来自的类。
 
getCollectionInfo() 要是节点是个鸠合,获得鸠合信息。一个鸠合子集老是一个鸠合项目。
 
getCollectionItemInfo() 要是节点是个鸠合项目,获得鸠合项目信息。一个鸠合项目老是一个鸠合的子集。
 
getContentDescription() 获得该节点的内容形貌。
 
getExtras() 获得具备附加数据的可选 bundle。该包是闲时建立的且永不为 null。留意:为了避免辩论,保举使用运用的包名作为环节字字首,要是从不同运用发出的相像环节词有不同的含义,大概会导致无停滞服无困扰。
 
getInputType() 获得定义为 InputType 的源中的输入范例。
 
getLabelFor() 为无停滞目标,获得作为标签代表该视图的节点信息。 返回AccessibilityNodeInfo
 
getLabeledBy() 为无停滞目标,获得作为标签代表该视图的节点信息。返回AccessibilityNodeInfo
 
getLiveRegion() 获得该节点的及时区域模式。一个及时区域是一个包含对用户来说紧张信息的节点,且当其改变时应该见知用户。比方,在一个登录界面,有一个发现“暗号错误”关照的 TextView,该视图应该使用ACCESSIBILITY_LIVE_REGION_POLITE模式被标记为一个及时区域。这是无停滞服无的义务,掌握TYPE_WINDOW_CONTENT_CHANGED 事件标识及时区域节点和其子元素的变更。及时区域模式,或要是视图不是个及时区域,返回ACCESSIBILITY_LIVE_REGION_NONE。
 
getMaxTextLength() 返回该节点的非常大文本长度。
 
getMovementGranularities() 获得遍历该节点文本的挪动粒度。
 
getPackageName() 获得该节点来自的包名。
 
getParent() 获得父级NodeInfo。
 
getRangeInfo() 要是节点是个局限,获得局限信息AccessibilityNodeInfo.RangeInfo
 
getText() 获得该节点的文本。
 
getTextSelectionEnd() 选定文本的末端,要是没有选定文本,返回光标位置,或要是不存在选定文本和光标,返回-1。
 
getTextSelectionStart() 选定文本的肇始,要是没有选定文本,返回光标位置,或要是不存在选定文本和光标,返回-1。
 
getViewIdResourceName() 获得源视图 id 的彻底及格源名称。
 
getWindowId() 获得该信息来自的窗口的id。
 
hashCode() 返回该对象的哈希编码值。多用于校验node是否相像
 
isAccessibilityFocused() 获得该节点是否可被无停滞聚焦。
 
isCheckable() 获得该节点是否可选中。
 
isChecked() 获得该节点是否已选中。
 
isClickable() 获得该节点是否可点击。
 
isContentInvalid() 获得该节点的内容是否已无效。比方,一个日期数据花样不正确。
 
isDismissable() 获得该节点是否可被封闭。
 
isEditable() 获得该节点是否可编纂。
 
isEnabled() 获得该节点是否可用。
 
isFocusable() 获得该节点是否可获得核心。
 
isFocused() 获得该节点是否已被聚焦。
 
isLongClickable() 获得该节点是否可长按点击。
 
isMultiLine() 获得该节点是否是个多行可编纂文本。
 
isPassword() 获得该节点是否是个暗号。
 
isScrollable() 获得该节点是否可转动。
 
isSelected() 获得该节点是否已当选定。
 
isVisibleToUser() 该节点是否对用户可见。
 
obtain(View root, int virtualDescendantId) 要是可获得,返回一个缓存实例,否则建立一个新的并配置源。 View:虚拟子树的根。 int:虚拟子息的id。返回一个实例化的AccessibilityNodeInfo
 
obtain(AccessibilityNodeInfo info) 要是可获得,返回一个缓存实例,或建立一个新的。返回的实例初始化自一个给定 root。
 
obtain() 要是可获得,返回一个缓存实例,否则,返回一个新的。
 
obtain(View source) 要是可获得,返回一个缓存实例,否则,返回一个新的并配置源。View:源视图。
 
performAction(int action, Bundle arguments) 在该节点上实行一个操纵。int: 要实行的操纵。Bundle:具备分外参数的包。返回一个布尔值,表示是否胜利实行操纵。
 
performAction(int action) 在该节点上实行一个操纵。
 
recycle() 返回一个实例重叠使用,接管掉目前的实例。
 
refresh() 革新视图发现的非常新状况信息。返回一个布尔值,表示是否革新胜利。
 
removeAction(int action) 该方法在 API 级别 21 被弃用。
 
setAccessibilityFocused(boolean focused) 配置该节点可无停滞聚焦。
 
setBoundsInParent(Rect bounds) 在父级坐标中配置节点界限。
 
setBoundsInScreen(Rect bounds) 在屏幕坐标中配置节点界限。
 
setCanOpenPopup(boolean opensPopup) 配置该节点可翻开一个弹窗或对话框。
 
setCheckable(boolean checkable) 配置该节点可选中。
 
setChecked(boolean checked) 配置该节点已选中。
 
setClassName(CharSequence className) 配置该节点来自的类。
 
setClickable(boolean clickable) 配置该节点可点击。
 
setCollectionInfo(AccessibilityNodeInfo.CollectionInfo collectionInfo) 要是该节点是个鸠合,配置鸠合信息。一个鸠合子集平时也是个鸠合项目。
 
setContentDescription(CharSequence contentDescription) 配置该节点的内容形貌。
 
setContentInvalid(boolean contentInvalid) 配置节点内容无效。比方,一个日期数据花样不正确。
 
setContextClickable(boolean contextClickable) 配置该节点文本可点击。
 
setDismissable(boolean dismissable) 配置该节点能够被封闭。
 
setEditable(boolean editable) 配置该节点可编纂。
 
setEnabled(boolean enabled) 配置该节点可用。
 
setFocusable(boolean focusable) 配置该节点可聚焦。
 
setFocused(boolean focused) 配置该节点已聚焦。
 
setInputType(int inputType) 配置源中的输入范例为inputType
 
setLabelFor(View root, int virtualDescendantId) 为无停滞目标,配置可作为标签代表视图的信息。要是 virtualDescendantId 为NO_ID,根被配置为标签。一个虚拟子息是一个假造视图,为无停滞目标,将本人汇报为视图档次的一片面。该操纵能够使绘制复杂内容的自定义视图,将本人汇报为虚拟视图树,然后相传其逻辑布局。
 
setLabelFor(View labeled) 为无停滞目标,配置可作为标签代表视图的信息。
 
setLabeledBy(View label) 为无停滞目标,配置可作为标签代表视图的信息。
 
setLabeledBy(View root, int virtualDescendantId) 为无停滞目标,配置可作为标签代表视图的信息。要是 virtualDescendantId 为NO_ID,根被配置为标签。一个虚拟子息是一个假造视图,为无停滞目标,将本人汇报为视图档次的一片面。该操纵能够使绘制复杂内容的自定义视图,将本人汇报为虚拟视图树,然后相传其逻辑布局。
 
setLiveRegion(int mode) 配置该节点的及时区域模式。int:及时区域模式,或要是视图不是个及时区域时,为ACCESSIBILITY_LIVE_REGION_NONE。
 
setLongClickable(boolean longClickable) 配置该节点可长按点击。
 
setMaxTextLength(int max) 配置非常大文本长度,或无尽制时为-1。普通情况下,用来标识一个可编纂文本框有输入字符数目限制。
 
getMovementGranularities() 配置遍历节点文本的挪动粒度。
 
setMultiLine(boolean multiLine) 配置该节点为一个多行可编纂文本。
 
setPackageName(CharSequence packageName) 配置该节点来自的包。
 
setParent(View root, int virtualDescendantId) 配置给定 root 虚拟子息的父元素。要是 virtualDescendantId 即是 NO_ID,该root 被配置为父级。一个虚拟子息是一个假造视图,为无停滞目标,将本人汇报为视图档次的一片面。该操纵能够使绘制复杂内容的自定义视图,将本人汇报为虚拟视图树,然后相传其逻辑布局。
 
setParent(View parent) 配置父元素。
 
setPassword(boolean password) 配置该节点为暗号。
 
setRangeInfo(AccessibilityNodeInfo.RangeInfo rangeInfo) 要是该节点是个局限,配置局限信息。
 
setScrollable(boolean scrollable) 配置该节点可转动。
 
setSelected(boolean selected) 配置该节点是否已选定。
 
setSource(View source) 配置信息源。
 
setSource(View root, int virtualDescendantId) 为给定 root 虚拟子息配置源。要是 virtualDescendantId 即是 NO_ID,该 root被配置为源。一个虚拟子息是一个假造视图,为无停滞目标,将本人汇报为视图档次的一片面。该操纵能够使绘制复杂内容的自定义视图,将本人汇报为虚拟视图树,然后相传其逻辑布局。
 
setText(CharSequence text) 配置该节点的文本。
 
setTextSelection(int start, int end) 配置文本选定的肇始和结尾。
 
setViewIdResourceName(String viewIdResName) 配置源视图id的资源名称
 
setVisibleToUser(boolean visibleToUser) 配置该节点对用户可见。
 
toString() 返回一个代表对象的字符串。 getClass().getName() + '@' + Integer.toHexString(hashCode())
 
writeToParcel(Parcel parcel, int flags) 封装该对象到一个包中。
 
API 21 ADD
 
getError() API Level 21 获得该节点的错误文本。
 
setError(CharSequence error) API Level 21 配置该节点的错误文本。
 
getWindow() API Level 21 获得该节点所属的窗口。AccessibilityWindowInfo
 
removeAction(AccessibilityNodeInfo.AccessibilityAction action) API Level 21 移除一个能够在该节点上实行的操纵。要是该操纵未被增加到该节点,调用该方法没有任何结果。返回一个布尔值表示是否胜利移除操纵。
 
removeChild(View root, int virtualDescendantId) API Level 21 移除给定根节点的一个虚拟子元素。要是子元素不是之前被增加到该节点的,调用该方法无结果。 返回一个布尔值表示是否存在子元素。
 
removeChild(View child) API Level 21 移除一个子元素。要是子元素先前未被增加到该节点,调用该方法无结果。
 
API 22 ADD
 
getTraversalAfter() API Level 22 目前节点被走访后,获得无停滞遍历中的下一个节点。一个屏幕阅读器必需在走访该节点内容之前,走访其余节点的内容。要是存在,返回后续节点,否则,返回 null。
 
getTraversalBefore() API Level 22 目前节点被走访后,获得无停滞遍历中的上一个节点。屏幕阅读器必需走访该节点的信息,在走访先前节点内容之前。
 
setTraversalAfter(View view) API Level 22 配置无停滞遍历中下一个被走访的视图。一个屏幕阅读器在走访该节点内容之前,必需走访另一个节点的内容。
 
setTraversalAfter(View root, int virtualDescendantId) API Level 22配置无停滞遍历中下一个被走访的视图。一个屏幕阅读器在走访该节点内容之前,必需走访另一个节点的内容。要是 virtualDescendantId 即是 NO_ID,root被配置为前任。一个虚拟子息是一个假造视图,为无停滞目标,将常州游戏开发培训本人汇报为视图档次的一片面。该操纵能够使绘制复杂内容的自定义视图,将本人汇报为虚拟视图树,然后相传其逻辑布局。
 
setTraversalBefore(View view) API Level 22 配置无停滞遍历中目前走访节点的上一个视图。一个屏幕阅读器在走访上一个节点之前,必需走访该节点的内容。
 
setTraversalBefore(View root, int virtualDescendantId) API Level 22 配置无停滞遍历中目前走访节点的上一个视图。一个屏幕阅读器在走访上一个节点之前,必需走访该节点的内容。要是virtualDescendantId 即是 NO_ID,root被配置为后任。一个虚拟子息是一个假造视图,为无停滞目标,将本人汇报为视图档次的一片面。该操纵能够使绘制复杂内容的自定义视图,将本人汇报为虚拟视图树,然后相传其逻辑布局。
 
API 23 ADD
 
isContextClickable() API Level 23 获得该节点是否高低文可点击。
 
API 24 ADD
 
setImportantForAccessibility(boolean important) API Level 24 配置该节点对无停滞很紧张。
 
setDrawingOrder(int drawingOrderInParent) API Level 24 配置该节点相关视图的绘制挨次。
 
getDrawingOrder() API Level 24。获得该节点中视图的相对绘制挨次。绘制挨次只决意于节点的父级,以是该索引只与其兄弟姐妹相关。在少许景象下,绘制挨次是根基同步的,以是两个兄弟姐妹的返回值相像是大概的。返回值会被跳过也是大概的。
 
isImportantForAccessibility() API Level 24 返回该节点是否来源于一个对无停滞相配紧张的视图。
 
performGlobalAction####
 
 
 
Action 释义
 
GLOBAL_ACTION_BACK 相配于点击物理按键返回
 
GLOBAL_ACTION_HOME 相配于点击物理按键Home键
 
GLOBAL_ACTION_NOTIFICATIONS 相配于下滑翻开关照
 
GLOBAL_ACTION_RECENTS 相配于点击物理按键近来使命键
 
GLOBAL_ACTION_QUICK_SETTINGS 翻开快速配置
 
GLOBAL_ACTION_POWER_DIALOG 翻开长按电源键的弹框
 
2.1.5 自定义AccessibilityService类的通例使用
 
 
 
public class MyAccessibilityService extends AccessibilityService {
 
 
 
    @Override
 
    protected void onServiceConnected() {
 
        super.onServiceConnected();
 
    }
 
 
 
    @Override
 
    public void onAccessibilityEvent(AccessibilityEvent event) {
 
        // 1.AccessibilityEvent中少许常用的使用方法
 
        // 这里咱们获得到该辅助功效的事件范例
 
        // 事件范例请参照 2.1.3中AccessibilityEventTypes表
 
        int eventType = event.getEventType();
 
        // 输出事件的字符串type
 
        String typeStr = event.eventTypeToString(eventType);
 
        // 凭据事件范例来分发咱们的需求的操纵,这里以窗口变更为例
 
        if(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED == eventType){
 
            // 校验咱们的辅助功效是否在约定好的运用界面实行,以配置界面为例
 
            if("com.android.settings".equals(event.getPackageName()){
 
                // doSomeThing
 
            }
 
        } else if(AccessibilityEvent.TYPE_GESTURE_DETECTION_START == eventType) {
 
            // 在监测得手势的时分
 
        } else {
 
            // 在实现操纵时,能够封闭本人的服无,下次使用再次开启。
 
            // API > = 24
 
            disableSelf();
 
        }
 
 
 
        // 2.经历event来遍历咱们的nodeInfo
 
        if (VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
 
            // 这里使用getResource()方法其实是从AccessibilityEvent秉承的
 
            // AccessibilityRecord中抽取AccessibilityNodeInfo
 
            // 现实调用的是AccessibilityRecord中的方法,返回的是AccessibilityNodeInfo mSourceNode
 
            AccessibilityNodeInfo info = event.getSource();
 
        else
 
            info = getRootInActiveWindow();
 
 
 
        // 3.遍历info中的子节点
 
        if (info.getChildCount() != 0){
 
            // 经历一个轮回将info的子节点遍历
 
            for (int i = 0; i < info.getChildCount(); i++) {
 
                // 获得子节点中某个特定的node,这里经历以下方法经历ID查找
 
                List<AccessibilityNodeInfo> list = info.findAccessibilityNodeInfosByViewId("com.android" +".settings:id/xxxx");
 
                // 经历text查找
 
                List<AccessibilityNodeInfo> list = info.findAccessibilityNodeInfosByText("xxxx");
 
                // 打印nodeinfo的信息
 
                Log.e("InfoType: " + info.getClassName());
 
                Log.e("InfoText: " + info.getText());
 
                Log.e("InfoPkgName: " + info.getPackageName());
 
                Log.e("InfoViewId: " + info.getViewIdResourceName());
 
            }
 
        }
 
 
 
        // 4.为节点增加操纵
 
        // 1) 首先获得到咱们的节点
 
        AccessibilityNodeInfo info = event.getSource();
 
        // 2) 经历查找指定的ID、text来查找一个系列的节点,返回一个list,需求校验list.size()是否为空
 
        List<AccessibilityNodeInfo> list = info.findAccessibilityNodeInfosByViewId("pkgName." + "id");
 
        AccessibilityNodeInfo info = list.get(0);
 
        // 3) 为节点增加操纵,点击事件(事件可参照AccessibilityNodeInfo表)
 
        info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
 
        // 4) 增加node可用的action,给node增加一个可肃清核心的操纵
 
        // 经历addAction(AccessibilityNodeInfo.AccessibilityAction action)
 
        info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_CLEAR_FOCUS);
 
        // 获得该node上可用的action属性list,能够用来查看该node的属性
 
        List<AccessibilityNodeInfo.AccessibilityAction> listAction = info.getActionList();
 
        
 
        // 5.获得该节点上子节点个数
 
        int childCount = info.getChildCount();
 
        
 
        // 6.操纵实现后,接管实例,返回一个下次可用的实例
 
        info.recycle();
 
 
 
        // 需求留意的是,在node.performAction以后,调用本地播送的话,以后的globeAction不会起用途,例:
 
        sureStopNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
 
        sureStopNode.recycle();
 
        SystemMessage.getInstance().send(SystemMessage.ACTION_POWER_BOOSTER_NEXT);
 
        performGlobalAction();// 这句话是不起用途的
 
 
 
        // 7.辅助功效的少许适用场景:
 
        // 1)片面运用中获得短信考证码(经历开启辅助功效的方法获得)
 
        //  - 监听关照栏的消息(typeNotificationStateChanged)
 
        //  - 弹出关照栏的时分获得该关照的节点信息(event.getSource())
 
        //  - 遍历root节点,获得表现信息的文本Node(info.findAccessibilityNodeInfosByViewId("pkgName." + "id"))
 
        //  - 经历NodeInfo.getText()方法获得到响应的文本信息,并掏出考证码
 
        //  - 作废掉关照栏弹出框
 
        //  - 获得到要输入的EditText获得干脆在本运用给需求填写考证码的区域配置文本。
 
 
 
        // 2)片面运用中规复APP的初始配置(肃清APP的数据)
 
        //  - 跳转到运用详情,经历findAccessibilityNodeInfosByViewId查找节点
 
        //  - 经历节点info.performAction(AccessibilityNodeInfo.ACTION_CLICK)点击肃清
 
        //  - 弹出断定对话框,同上方法找到断定节点,点击后返回
 
        
 
        // 3)监测运用是否在前台,APP的启动(经历windowstatechange事件获得到目前的event的pkgName)
 
        //  - 经历汲取typeWindowStateChanged事件,获得event的pkgName断定哪一个运用启动大概在非常上层表现(悬浮窗不适用)
 
 
 
        // 4)自动安置与卸载软件
 
        //  - 同3,寻找响应的节点,点击事件
 
 
 
        // 5)自动化UI测试
 
 
 
        // 6)非常多见的抢红包
 
 
 
        // 7)经历辅助功效开启少许权限(不需求用户手动点击开启了)
 
        //  - 在用户断定需求开启权限时,自动跳转,寻找响应的开关按钮
 
        //  - 需求留意的是,片面开关(switch button, checkbox)大概没有ID,需求经历info.getClassName()来校验,属于那品种型的view。
 
    }
 
 
 
    @Override
 
    public void onInterrupt() {
 
    }
 
   
 
}
 
需求重写的少许方法:
 
 
 
onServiceConnected() 该方法在初始化辅助功效服无时调用,能够在这时做响应的初始化事情。
 
onAccessibilityEvent() 在获得到指定的监听事件时,经历回调这个方法来进行对应的操纵
 
onInterrupt() 体系想要中缀辅助功效时会调用该方法
 
固然service中的onUnbind()方法也同样适用,在onUnbind()中开释少许资源也是能够的。
 
 
 
Note: 这里需求打听的是辅助功效非常紧张的即是手机机型的适配。由于各个厂商的体系不同样,导致了咱们在获得少许节点时,需求的节点ID不同(经历ID获得节点时一种对照高效的方法)。而咱们普通经历Device Monitor中的Hierarchy View获得节点信息。同时在此方法下,许多手机没法获得到节点信息,咱们就需求使用增加flagReportViewIds进行手动遍历界面节点的方法获得nodeInfo。
 
 
 
以上是辅助功效通例使用以及使用场景的介绍。底下为辅助功效的注册。
 
 
 
<service
 
    android:name=".咱们本人秉承自AccessibilityService的类"
 
        android:label="@string/app_name"
 
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
 
        <intent-filter>
 
            <action android:name="android.accessibilityservice.AccessibilityService"/>
 
        </intent-filter>
 
 
 
        <meta-data
 
            android:name="android.accessibilityservice"
 
            android:resource="@xml/第二个辅助功效配置方法的文件,寄放在xml下"/>
 
</service>
 
2.2 API > 20 新增方法,接口(预览版)使用探讨:###
 
2.2.1 AccessibilityService新增方法一览:
 
 
 
API 21:
 
 
 
Method 形貌
 
getWindows() 返回窗口非常上层的一个用户可交互的窗口信息节点 List<AccessibilityWindowInfo>
 
获得屏幕上的窗口。
 
返回一个有指标的用户能够与之进行交互的窗口,而不是全部的窗口。
 
 
 
为了走访Windows,服无必需经历在其元数据中配置AccessibilityService_canRetrieveWindowContent属性来说明检索窗口内容的功效。别的,服无必需选定经历配置FLAG_RETRIEVE_INTERACTIVE_WINDOWS标记来检索交互式窗口。
 
 
 
使用此方法来获得咱们屏幕上非常上层的一个窗口根节点。
 
 
 
API 24:
 
 
 
Method 形貌
 
getSoftKeyboardController() 返回软键盘掌握器,可用于盘问和点窜软键盘表现模式。
 
返回AccessibilityService.SoftKeyboardController其中能够使用增加addOnShowModeChangedListener()的方法来进行对键盘的表现潜藏状况监听,经历getShowMode()获得到软键盘的表现潜藏状况,setShowMode(int showMode)配置软键盘的表现潜藏状况。
 
 
 
Method 形貌
 
disableSelf() 封闭本人service的方法,在配置界面能够看到辅助功效状况被封闭
 
经历在服无中调用该方法能够将本人的服无休止,同时在辅助功效开启界面上的开关也会随之封闭。
 
 
 
Method 形貌
 
dispatchGesture(GestureDescription gesture, AccessibilityService.GestureResultCallback callback, Handler handler) 将手势发送到触摸屏。
 
能够经历设定GestureDescription将手势的轨迹表现在触摸屏上,同时能够经历GestureResultCallback回调获得事件的实现情况。
 
 
 
Method 形貌
 
findFocus(int focus) 找到具备指定核心范例的视图。
 
这里的核心范例有FOCUS_INPUT和FOCUS_ACCESSIBILITY划分代表了输入核心和无停滞重点。
 
FOCUS_ACCESSIBILITY这个核心,是需求使用setAccessibilityFocused(boolean isFocus)方法进行配置过得核心。
 
 
 
需求留意的是:要是要使用该方法的话,需求先配置AccessibilityService_canRetrieveWindowContent同时增加一个flag:FLAG_RETRIEVE_INTERACTIVE_WINDOWS。
 
 
 
Method 形貌
 
getMagnificationController() 返回放大掌握器,可用于盘问和点窜表现放大的状况。
 
返回:AccessibilityService.MagnificationController。为了掌握放大倍数,辅助功效服无必需经历在其元数据中配置AccessibilityService_canControlMagnification属性来说明该功效。
 
 
 
API 26:
 
 
 
Method 形貌
 
getAccessibilityButtonController() 体系导航区域内的辅助功效按钮掌握器
 
返回:AccessibilityButtonController:
 
 
 
当配置FLAG_REQUEST_ACCESSIBILITY_BUTTON时,此类可用于盘问辅助功效按钮的状况并注册回调以进行交互,并对可走访性按钮进行状况变动。
 
 
 
留意:此类和FLAG_REQUEST_ACCESSIBILITY_BUTTON不应该被用作经历AccessibilityService为用户提供功效的唯独手法。 少许建筑实现能够选定不提供软件发现的体系导航区域,使得该功效永远不可用。
 
 
 
留意:在支持辅助功效按钮的建筑实现中,它大概永远不可用,比方前台运用程序使用SYSTEM_UI_FLAG_HIDE_NAVIGATION时。 用户还能够选定将该按钮分派给另一个可走访性服无或功效。 在每种情况下,将调用注册的AccessibilityButtonController.AccessibilityButtonCallback的onAvailabilityChanged(AccessibilityButtonController,boolean)方法来提供对可走访性按钮对注册服无的可用性的变动的关照。
 
 
 
留意底部导航栏的小人:
 
 
 
 
 
 
 
 
 
 
 
image
 
 
 
底下是一个简单的用例:
 
 
 
public class MyAccessibilityService extends AccessibilityService {
 
 
 
    @Override
 
    protected void onServiceConnected() {
 
        super.onServiceConnected();
 
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 
            info.flags = AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON;
 
        } else {
 
            info.flags = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
 
        }
 
        info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
 
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
 
        info.notificationTimeout = 100;
 
        setServiceInfo(info);
 
    }
 
 
 
    @Override
 
    public void onAccessibilityEvent(AccessibilityEvent event) {
 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 
            AccessibilityButtonController mAccessibilityButtonController = getAccessibilityButtonController();
 
            mAccessibilityButtonController.registerAccessibilityButtonCallback(new AccessibilityButtonController.AccessibilityButtonCallback() {
 
                @Override
 
                public void onClicked(AccessibilityButtonController controller) {
 
                    super.onClicked(controller);
 
                    // 底部导航栏中辅助功效按钮点击事件回调
 
                    Toast.makeText(MyAccessibilityService.this, "on Click", Toast.LENGTH_SHORT).show();
 
                }
 
 
 
                @Override
 
                public void onAvailabilityChanged(AccessibilityButtonController controller, boolean available) {
 
                    super.onAvailabilityChanged(controller, available);
 
                    // 辅助功效可用性改变的回调。返回了辅助功效底部按钮是否可用的布尔值,和按钮掌握器
 
                    // available = true 表示该按钮对本服无可用
 
                    // available = false 是由于建筑表现了按钮,或按钮被分派到另一个服无或其余缘故。
 
                }
 
            });
 
        }
 
    }
 
 
 
    @Override
 
    public void onInterrupt() {
 
    }
 
}
 
在开启辅助功效以后,要是是O体系的话,在底部导航栏会发现一个辅助功效的小人。同时这个小人能够汲取到点击事件,和辅助功效可用状况变更。
 
 
 
Method 形貌
 
getFingerprintGestureController() 返回指纹手势掌握器
 
指纹手势掌握器:FingerprintGestureController
 
 
 
只有建筑具备能够检验手势的传感器,AccessibilityService能够捕捉在建筑的指纹传感器上实行的手势。
 
使用时需求说明CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES同时需求权限USE_FINGERPRINT,由于没有真机调试该方法,待Google公布正式版API后连续钻研
 
 
 
支持的四个事件:
 
 
 
常量 形貌
 
FINGERPRINT_GESTURE_SWIPE_DOWN 指纹手势下滑。
 
FINGERPRINT_GESTURE_SWIPE_LEFT 指纹手势左滑。
 
FINGERPRINT_GESTURE_SWIPE_RIGHT 指纹手势右滑。
 
FINGERPRINT_GESTURE_SWIPE_DOWN 指纹手势上滑。
 
共有方法
 
 
 
方法 形貌
 
isGestureDetectionAvailable() 校验手势监测是否可用。
 
registerFingerprintGestureCallback(FingerprintGestureController.FingerprintGestureCallback callback, Handler handler) 经历该方法注册一个指纹手势的回调。
 
unregisterFingerprintGestureCallback(FingerprintGestureController.FingerprintGestureCallback callback) 作废注册。
 
registerFingerprintGestureCallback(FingerprintGestureController.FingerprintGestureCallback, Handler) 作废注册。
 
其中的FingerprintGestureController.FingerprintGestureCallback与之前的辅助功效按钮回调根基相像,都惟有两个方法。
 
 
 
方法 形貌
 
onGestureDetected(int gesture) 这里获得到响应的手势。
 
onGestureDetectionAvailabilityChanged(boolean available) 这里返回了手势监测是否可用。
 
2.2.1 AccessibilityNodeInfo新增方法一览:
 
 
 
API 21
 
 
 
Method 形貌
 
getError() 获得该节点的错误文本。
 
setError(CharSequence error) 配置该节点的错误文本。
 
以上两个方法需求搭配使用。
 
 
 
Method 形貌
 
getWindow() 获得该节点所属的窗口(根节点)
 
经历该方法,咱们能够使用一个子节点来重新获得到咱们的根节点。在需求屡次操纵界面元素的情况下(同时没有发生windowstatechange事件),咱们能够不经历监听事件来进行下一个节点的操纵。
 
 
 
Method 形貌
 
addAction(AccessibilityNodeInfo.AccessibilityAction action) 为一个nodeInfo增加一个操纵,API 21
 
removeAction(AccessibilityNodeInfo.AccessibilityAction action) 移除一个能够在该节点上实行的操纵。
 
removeChild(View root, int virtualDescendantId) 移除给定根节点的一个虚拟子元素。
 
removeChild(View child) 移除一个子元素。
 
第一个addAction(AccessibilityNodeInfo.AccessibilityAction action)方法是API 21时替代API 20中的addAction(int action)方法。
 
提供了一个在辅助功效外操纵节点的方法,该方法不行在辅助功效服无中调用,否则会报错java.lang.IllegalStateException: Cannot perform this action on a sealed instance.
 
 
 
后三个方法使用的条件都是需求事前在节点中增加了操纵,大概视图,否则都不会起用途。要分析的是removeAction方法也需求在服无外调用,否则也要报错
 
 
 
API 22
 
 
 
Method 形貌
 
getTraversalAfter() 目前节点被走访后,获得无停滞遍历中的下一个节点。
 
getTraversalBefore() 目前节点被走访后,获得无停滞遍历中的上一个节点。
 
setTraversalAfter(View view) 配置无停滞遍历中下一个被走访的视图。一个屏幕阅读器在走访该节点内容之前,必需走访另一个节点的内容。要是 virtualDescendantId 即是 NO_ID,root被配置为前任。
 
setTraversalAfter(View root, int virtualDescendantId) 配置无停滞遍历中下一个被走访的视图。
 
setTraversalBefore(View view) 配置无停滞遍历中目前走访节点的上一个视图。
 
经历在view的xml属性中增加android:accessibilityTraversalAfter="+id"方法来进行辅助功效遍用时的挨次后,经历本方法获得下一个节点。
 
 
 
经历在view的xml属性中增加android:accessibilityTraversalBefore="+id"方法来进行辅助功效遍用时的挨次,同上。
 
 
 
经历View.setAccessibilityTraversalBefore(+id)方法配置挨次。
 
 
 
API 23
 
 
 
Method 形貌
 
isContextClickable() 获得该节点是否高低文可点击。
 
经历View的setContextClickable(Boolean isClickable)方法配置一个View是否能够点击。然后经历该方法,咱们能够获得到节点高低文的能否点击状况。
 
 
 
API 24
 
 
 
Method 形貌
 
setImportantForAccessibility(boolean important) 配置该节点对无停滞很紧张。
 
isImportantForAccessibility() 返回该节点是否来源于一个对无停滞相配紧张的视图。
 
经历View的XML属性配置android:importantForAccessibility=""状况后,咱们能够经历本方法获得到该状况的boolean值。
 
 
 
Method 形貌
 
setDrawingOrder(int drawingOrderInParent) 配置与此节点对应的视图的画图挨次。
 
getDrawingOrder() 获得该节点中视图的相对绘制挨次。
 
同样的不行在辅助功效服无中调用该方法。
 
参考ViewGroup.setChildrenDrawingOrderEnabled()中children的绘制挨次明白。
 
 
 
返回与该节点对应的视图相对于其兄弟姐妹的画图位置。
 
返回的数值从1首先,表示相对于父节点中,并列view的绘制挨次。
 
 
 
2.3 API > 20 新增方法,接口(预览版)接口类文档汇总:###
 
1、GestureDescription使用dispatchGesture(GestureDescription ge, GestureResultCallback cb, Handler handler)方法时需求学习的类,它提供了获得手势的Builder中配置的少许属性。
 
 
 
2、AccessibilityService.GestureResultCallback使用dispatchGesture(GestureDescription ge, GestureResultCallback cb, Handler handler)方法时需求打听的类,提供了手势的回调。
 
 
 
3、AccessibilityService.MagnificationController 使用getMagnificationController()返回的放大掌握器。
 
 
 
4、AccessibilityService.SoftKeyboardController使用getSoftKeyboardController()返回的键盘掌握器。
 
 
 
5、AccessibilityButtonControllerAndroid O以上的体系返回的导航栏按钮掌握器,其中另有导航栏按钮回调需求打听。
 
 
 
6、AccessibilityButtonController.AccessibilityButtonCallback用于与体系导航区域内的辅助功效按钮的状况进行交互和变动的回调。
 
 
 
7、FingerprintGestureControllerAndroid O新增的指纹掌握器。
 
 
 
8、FingerprintGestureCallback为手势掌握器增加的回调方法。
 

上篇:上一篇:android获取建筑唯一标识完善计划
下篇:下一篇:AccessibilityService实现微信切换账号功效