AccessibilityService 辅助功能
Posted 胖虎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AccessibilityService 辅助功能相关的知识,希望对你有一定的参考价值。
AccessibilityService 辅助功能
简介
无障碍辅助功能,android提出这个功能,主要是用于帮助残疾人使用Android设备和应用程序。
它们在后台运行,AccessibilityEvents事件被触发时接收系统的回调。这样的事件是指用户界面中的一些状态转换,例如,焦点改变,按钮被点击,界面变化。
这样的服务Service可以选择性地查询活动窗口内容的功能。服务的开发需要扩展AccessibilityService这个类并实现它的抽象方法。
开发实践
首先需要定义一个Service Class, 继承并实现AccessibilityService。
class MyCustomAccessibilityService : AccessibilityService()
override fun onInterrupt()
// TODO
override fun onAccessibilityEvent(event: AccessibilityEvent?)
// TODO
在AndroidManifest.xml中声明该Service, 并且需要声明权限:
Permission : android.permission.BIND_ACCESSIBILITY_SERVICE
<service android:name=".MyCustomAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
. . .
</service>
在res/xml文件夹下加入参数配置信息xml文件,并配置到AndroidManifest.xml中
accessibilityservice_configure.xml
<accessibility-service
android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
android:packageNames="foo.bar, foo.baz"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:description="@string/description"
android:accessibilityFlags="flagDefault"
android:settingsActivity="foo.bar.TestBackActivity"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true" />
<service android:name=".MyCustomAccessibilityService">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="The name you want" android:resource="@xml/accessibilityservice_configure" />
</service>
使用代码的方式修改配置信息,可用于提供给用户一些可变的配置
AccessibilityService#setServiceInfo(AccessibilityServiceInfo)
标签对应AccessibilityService.SERVICE_META_DATA
具体包含哪些数据可以由我们定义呢?
标签包含的参数属性与作用
属性 | 作用 |
---|---|
android:description | 用于声明软件的介绍,在系统辅助功能中可以显示 |
android:settingsActivity | 值可以设置成我们App的完整路径Activity,用于定义用户在辅助功能设置中点击应用的“设置”按钮可以跳转到我们App |
android:accessibilityEventTypes | 指定服务Service希望接收的事件类型。(AccessibilityEvent) |
android:packageNames | 指定接收哪些包名下的事件类型,默认全部应用 |
android:accessibilityFeedbackType | 声明服务提供的反馈类型有哪些。(AccessibilityServiceInfo) |
android:notificationTimeout | 声明系统将两个相同类型的事件发给Service中间要间隔多久。(单位: ms) |
android:accessibilityFlags | 在AccessibilityServiceInfo中指定的其他标志 |
android:canRetrieveWindowContent | 指定Service是否能够检索活动窗口内容 |
android:canRequestTouchExplorationMode | 指定Service是否能够拥有触摸浏览模式功能 |
android:canRequestEnhancedWebAccessibility | 指定Service是否能够拥有增强的Web访问功能 |
android:canRequestFilterKeyEvents | 指定Service是否能过滤事件,会给用户提示监测银行卡账号和密码,没必要,不建议配置此项 |
android:canControlMagnification | 声明Service是否可以调整显示放大缩小 |
android:canPerformGestures | 声明Service是否可以模拟手势操作 |
android:canRequestFingerprintGestures | 声明Service是否可以从指纹传感器捕获手势的权限 |
android:nonInteractiveUiTimeout | UI其他非交互控件导致的超时时间,可以通过AccessibilityManager#getRecommendedTimeoutMillis函数获取,动态设置 |
android:interactiveUiTimeout | UI交互控件超时时间,可以通过AccessibilityManager#getRecommendedTimeoutMillis函数获取,动态设置 |
android:animatedImageDrawable | 提供Service介绍给用户的动画图像 |
android:htmlDescription | Service提供给用户的介绍内容HTML格式 |
android:canTakeScreenshot | 声明Service是否有截屏的权力 |
AccessibilityEvent
AccessibilityEvent#TYPE_VIEW_CLICKED
AccessibilityEvent#TYPE_VIEW_LONG_CLICKED
AccessibilityEvent#TYPE_VIEW_FOCUSED
AccessibilityEvent#TYPE_VIEW_SELECTED
AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED
AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED
AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED
AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_START
AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_END
AccessibilityEvent#TYPE_VIEW_HOVER_ENTER
AccessibilityEvent#TYPE_VIEW_HOVER_EXIT
AccessibilityEvent#TYPE_VIEW_SCROLLED
AccessibilityEvent#TYPE_VIEW_TEXT_SELECTION_CHANGED
AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED
AccessibilityEvent#TYPE_ANNOUNCEMENT
AccessibilityEvent#TYPE_GESTURE_DETECTION_START
AccessibilityEvent#TYPE_GESTURE_DETECTION_END
AccessibilityEvent#TYPE_TOUCH_INTERACTION_START
AccessibilityEvent#TYPE_TOUCH_INTERACTION_END
AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUSED
AccessibilityEvent#TYPE_WINDOWS_CHANGED
AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED
Feedback types
AccessibilityServiceInfo#FEEDBACK_AUDIBLE
AccessibilityServiceInfo#FEEDBACK_HAPTIC
AccessibilityServiceInfo#FEEDBACK_AUDIBLE
AccessibilityServiceInfo#FEEDBACK_VISUAL
AccessibilityServiceInfo#FEEDBACK_GENERIC
AccessibilityServiceInfo#FEEDBACK_BRAILLE
以上是关于AccessibilityService 辅助功能的主要内容,如果未能解决你的问题,请参考以下文章
Android辅助功能AccessibilityService监听当前包名变化
Android辅助功能AccessibilityService监听当前包名变化
Android辅助功能AccessibilityService监听当前包名变化