一、無障礙簡介
無障礙服務(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);
這樣就可以全局監聽按鍵消息了。