• Android AccessibilityService


    Android AccessibilityService

    简介

    无障碍服务(AccessibilityService),是Google推出为了帮助残障用户使用 Android 设备和应用而推出的比较特殊的service。通过无障碍服务,开发者可提供界面增强功能,来协助残障用户或可能暂时无法与设备进行全面互动的用户完成操作。

    无障碍服务虽然不位于Android四大组件之中,但功能给产品带来的影响却不可小觑,例如曾经的自动抢红包功能,甚至因为太过火爆,而被某些手机厂商加入到系统功能之中,那时抢红包靠的就不是手速。其它类似使用无障碍服务开发的产品有微光盲人生活辅助平台,讯飞心智无障碍助手软件等。

    作用

    无障碍服务,可以监听界面的操作,比如:点击、拖动、界面更新等信息。更为强大的是可以获取屏幕信息,同时具备普通Service的能力。(在别人手机中植入一个无障碍服务并开启,可以监听他的手机操作和屏幕信息,eg:获取微信、QQ当前聊天文字并上传)

    因为无障碍服务相比一般Service过于强大,安装后还需要在设置->辅助功能中手动开启。

    创建AccessibilityService与声明
    https://developer.android.google.cn/reference/android/accessibilityservice/AccessibilityService.html

    1.创建一个类继承自AccessibilityService

    为了使一个service被视为无障碍服务,必须在清单的application标签中添加一个service标签、过滤器,为了与 Android 4.1 及更高版本兼容,还必须添加BIND_ACCESSIBILITY_SERVICE权限。

    public class MyAccessibilityService extends AccessibilityService {
    	protected void onServiceConnected() {
    		super.onServiceConnected();
    		//无障碍服务连接 可以在这里打开一个悬浮窗等等
    	}
     
    	@Override
    	public void onAccessibilityEvent(AccessibilityEvent event) {
     		//事件处理
    	}
     
    	@Override
    	public void onInterrupt() {
     		//无障碍服务断开连接
    	}
     
    	@Override
    	public boolean onUnbind(Intent intent) {
    		return super.onUnbind(intent);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    AccessibilityService继承自普通的Service,因而具备普通Service的生存周期,同时具有自己的一些生命周期。

    函数名 描述
    onServiceConnected() (可选)当系统成功连接到该AccessibilityService时,将调用此方法。主要用与一次性配置或调整的代码。
    onAccessibilityEvent() (必要)当系统监测到相匹配的AccessibilityEvent事件时,将调用此方法,在整个Service的生命周期中,该方法将被多次调用。
    onInterrupt() (必要)系统需要中断AccessibilityService反馈时,将调用此方法。AccessibilityService反馈包括服务发起的震动、音频等行为。
    onUnbind() (可选)系统要关闭该服务是,将调用此方法。主要用来释放资源。

    2.AccessibilityService服务声明

    和普通Service一样,AccessibilityService同样需要在Manifest.xml中注册。

     
         
             
         
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    android.permission.BIND_ACCESSIBILITY_SERVICE权限和action是必须的。
    同时AccessibilityService需要提供设置列表(meta-data),该设置也可以在运行时通过AccessibilityService.setServiceInfo (AccessibilityServiceInfo info)进行动态设置。不过该方式并不能设置所有的参数,因而推荐的方法为(meta-data)。
    android:resource中的地址为:/res/xml/accessibility_service_config.xml。

    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    各项参数参考AccessibilityServiceInfo。

    AccessibilityServiceInfo 配置类

    https://developer.android.google.cn/reference/android/accessibilityservice/AccessibilityServiceInfo.html
    AccessibilityService的配置类,可使用setService进行动态设置,同时和上述的accessibility_service_config.xml相对应。
    以下参数可以使用“|”表示使用多个选项。

    android:accessibilityEventTypes 事件类型

    AccessibilityService服务响应的事件类型,只有声明了的类型,系统才会调用该服务的onAccessibilityEvent。

    常量 描述
    typeViewClicked 点击事件
    typeViewSelected view被选择
    typeViewScrolled 滑动事件
    typeWindowContentChanged 窗口内容该表
    typeAllMask 所有事件

    完整列表如下:

    typeViewClicked 
    typeViewLongClicked 
    typeViewSelected 
    typeViewFocused 
    typeViewTextChanged 
    typeWindowStateChanged 
    typeNotificationStateChanged 
    typeViewHoverEnter 
    typeViewHoverExit 
    typeTouchExplorationGestureStart 
    typeTouchExplorationGestureEnd 
    typeWindowContentChanged 
    typeViewScrolled 
    typeViewTextSelectionChanged 
    typeAnnouncement 
    typeViewAccessibilityFocused 
    typeViewAccessibilityFocusCleared 
    typeViewTextTraversedAtMovementGranularity 
    typeGestureDetectionStart 
    typeGestureDetectionEnd 
    typeTouchInteractionStart 
    typeTouchInteractionEnd 
    typeWindowsChanged 
    typeContextClicked 
    typeAssistReadingContext 
    typeAllMask
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    android:accessibilityFeedbackType 反馈类型
    AccessibilityService服务的反馈类型。

    常量 描述
    feedbackSpoken 语音反馈
    feedbackHaptic 触觉(震动)反馈
    feedbackAudible 音频反馈
    feedbackVisual 视频反馈
    feedbackGeneric 通用反馈
    feedbackAllMask 以上都具有

    android:accessibilityFlags 额外声明
    一些格外的参数。

    常量 描述
    flagDefault 默认
    flagIncludeNotImportantViews
    flagRequestTouchExplorationMode
    fla
  • 相关阅读:
    LENOVO联想笔记本小新 Pro-14 2021AMD处理器ACH版(82MS)原厂Win10系统
    真的很难理解?RecyclerView 缓存机制到底是几级缓存?
    Docker安装Redis并使用Another Redis Desktop Manager连接
    Node-v14.20.0 Windows下的环境变量配置
    【微服务】七. http客户端Feign
    【C++】构造函数分类 ② ( 在不同的内存中创建类的实例对象 | 栈内存中创建实例对象 | new 关键字创建对象 )
    Win10怎么设置待机时间
    实现一个动态规划算法,解决背包问题
    Vivado详细使用教程 | LED闪烁示例
    Gitlab服务器切换来版本升级,执行漏洞修复
  • 原文地址:https://blog.csdn.net/fromVillageCoolBoy/article/details/133989916