[TOC]
image
一、无障碍简介
无障碍服务(AccessibilityService)是一套可以模拟操作的系统级别的API。用户同意我们的应用获取无障碍服务的权限之后就可以模拟操作,来控制用户的手机。无障碍服务的好处很多,可以实现一键操作,帮助残障人士使用手机。
二、具体需求
想要实现全局监听蓝牙按键消息
三、实现方法
1、添加相应服务
在AndroidMainfest.xml
中添加相应的服务
<service
android:name=".AccessBleKeys"
android:enabled="true"
android:exported="true"
android:label="@string/app_name"
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/ble_service_config" />
</service>
2、为服务添加配置文件
添加一配置文件ble_service_config.xml
,其内容如下
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagRequestFilterKeyEvents"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
android:description="@string/app_name"
android:notificationTimeout="100"/>
3、重写方法
在AccessBleKeys
中重写onKeyEvent
方法,在该方法下即可实现对按键的监听
protected boolean onKeyEvent(KeyEvent event) {
keyUtil.dispatchKeyEvent(event);
return super.onKeyEvent(event);
}
4、申请软件无障碍权限
因系统中已有root权限 ,所以直接使用命令搞定
CommandExecution.execCommand("settings put secure enabled_accessibility_services " + getPackageName() + "/" + AccessBleKeys.class.getName(), true);
CommandExecution.execCommand("settings put secure accessibility_enabled 1", true);
这样就可以全局监听按键消息了。