Android AccessibilityService

本文介绍了Android AccessibilityService,用于帮助残障用户使用Android设备。主要内容包括创建 AccessibilityService,服务声明,AccessibilityServiceInfo 配置,AccessibilityEvent 和 AccessibilityNodeInfo 的使用,以及如何利用AccessibilityService实现抢红包插件和手势操作。此外,还探讨了在稀土掘金签到等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
	}
}

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

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

2.AccessibilityService服务声明

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

<service android:name=".MyAccessibilityService" 
    android:label="@string/accessibility_service_label" 
    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/accessibility_service_config" />
</service>

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

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"                         
    android:description="@string/accessibility_service_description" 
    android:packageNames="com.example.android.apis" 
    android:accessibilityEventTypes="typeAllMask" 
    android:accessibilityFlags="flagDefault"     
    android:accessibilityFeedbackType="feedbackSpoken" 
    android:notificationTimeout="100" 
    android:canRetrieveWindowContent="true" 
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"/>
<!--description:服务的描述文字-->
<!--canPerformGestures:是否支持手势-->
<!--notificationTimeout:事件的发送间隔事件,单位毫秒-->
<!--canRetrieveWindowContent:是否允许读取窗口中的内容-->

各项参数参考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

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

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

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

常量 描述
flagDefault 默认
flagIncludeNotImportantViews
flagRequestTouchExplorationMode
fla
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值