抢红包软件背后的 Accessibility 服务及启动原理

在这里插入图片描述

前言

最近开发的一款设备使用到了Accessibility 功能,Android 提供了Accessibility功能和服务帮助这些用户更加简单地操作设备。

需要实现AccessibilityService,AccessibilityService是一个系统服务,它运行在后台,并且能够收到由系统发出的一些事件,比如通知状态、view 的一些相关事件,指纹,touch 等。

界面中产生的任何变化都会由系统通知给 AccessibilityService。大家熟知的抢红包软件,Talkback 都是使用AccessibilityService 实现的。自动化测试等等,都是基于 Accessibility。

后面几篇文章,将慢慢揭开Accessibility的神秘的面纱。请大家多多关注。

AccessibilityService 是 Service 吗

简单例子这里面就不讲了,大家可以网上搜索下。

AndroidManifest.xml 配置如下

 <service
        android:name="XXX.Service"
        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/accessible_service_config" />//对AccessibilityService 的配置文件
    </service>
</application>

AccessibilityService 写法就是 Serviceandroid:permissionintent-filter 都是必要配置。

貌似还是 Service 那一套,但又不仅限于此,后面的内容可以发现它是不一般的 Servcie。

AccessibilityService 如何启动的

虽作为 Servcie,App 本身并没有启动和停止它,完全由系统调度,这是第一个不一样的地方。

在 AOSP 中类似的由系统调度的 App Service 有很多,比如 JobServiceAutoFillServiceNotificationAssistantService

下面将将具体解答这两个问题:

  1. 谁启动和停止 AccessibilityService ?
  2. 设备重启了,AccessbilityService 也会启动吗,不会被kill吗?

1. 谁启动了 AccessibilityService

安装AccessibilityService 的应用,会出现在设置-无障碍-应用列表中,选择打开,应用中的AccessibilityService 就启动。

代码上,设置应用 会将AccessibilityService 的 ComponentName 信息 存入 Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES

AccessibilityManagerService 系统服务将监听该 Map 的变化,启动或者关闭相应 ComponentName 的 AccessibilityService。

流程如下:

  1. 监听 Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES
  2. 更新 AccessibilityUserState
  3. 遍历 mEnableServices ,如果没有bind 则调用 bindService 启动它

2、重启会AccessbilityService 会启动吗&#x

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值