[TOC]

image
一、無障礙簡介
無障礙服務(wù)(AccessibilityService)是一套可以模擬操作的系統(tǒng)級別的API。用戶同意我們的應(yīng)用獲取無障礙服務(wù)的權(quán)限之后就可以模擬操作,來控制用戶的手機(jī)。無障礙服務(wù)的好處很多,可以實現(xiàn)一鍵操作,幫助殘障人士使用手機(jī)。
二、具體需求
想要實現(xiàn)全局監(jiān)聽藍(lán)牙按鍵消息
三、實現(xiàn)方法
1、添加相應(yīng)服務(wù)
? 在AndroidMainfest.xml中添加相應(yīng)的服務(wù)
<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、為服務(wù)添加配置文件
? 添加一配置文件ble_service_config.xml,其內(nèi)容如下
<?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方法,在該方法下即可實現(xiàn)對按鍵的監(jiān)聽
protected boolean onKeyEvent(KeyEvent event) {
keyUtil.dispatchKeyEvent(event);
return super.onKeyEvent(event);
}
4、申請軟件無障礙權(quán)限
因系統(tǒng)中已有root權(quán)限 ,所以直接使用命令搞定
CommandExecution.execCommand("settings put secure enabled_accessibility_services " + getPackageName() + "/" + AccessBleKeys.class.getName(), true);
CommandExecution.execCommand("settings put secure accessibility_enabled 1", true);
這樣就可以全局監(jiān)聽按鍵消息了。