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:nonInteractiveUiTimeoutUI其他非交互控件导致的超时时间,可以通过AccessibilityManager#getRecommendedTimeoutMillis函数获取,动态设置
android:interactiveUiTimeoutUI交互控件超时时间,可以通过AccessibilityManager#getRecommendedTimeoutMillis函数获取,动态设置
android:animatedImageDrawable提供Service介绍给用户的动画图像
android:htmlDescriptionService提供给用户的介绍内容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 辅助功能的主要内容,如果未能解决你的问题,请参考以下文章

AccessibilityService 辅助功能

Android辅助功能AccessibilityService监听当前包名变化

Android辅助功能AccessibilityService监听当前包名变化

Android辅助功能AccessibilityService监听当前包名变化

Android辅助功能AccessibilityService自动全选择文字粘贴模拟输入

IMS:AccessibilityService辅助服务拦截注入Input事件