安卓服务里监听按钮

439 阅读1分钟
一.使用AccessibilityService实现按钮监听,在资源文件夹新建xml资源文件夹,然后新accessibility_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/accessibility_service_description"
    />
 
二.在配置文件中配置
<service
android:name=".service.MyAccessibilityService"
android:label="按钮监听"
android:enabled="true"
android:exported="true"
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>
 

三.创建MyAccessibilityService类,继承AccessibilityService类 重写onKeyEvent方法
public class MyAccessibilityService extends AccessibilityService {
    private static final String TAG = "测试";
    long aLong = 0, bLong = 0;
    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
    }



    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
    }

    @Override
    protected boolean onKeyEvent(KeyEvent event) {
        if (event.getKeyCode()==93){
            bLong = System.currentTimeMillis();
            if (event.getKeyCode() == 93) {
                if (aLong == 0) {
                    aLong = System.currentTimeMillis();
                } else {
                    if (bLong - aLong < 2000) {
                        Map<String, String> map = new HashMap<>();
                        map.put("class", "AdPresentation.class");
                        EventBus.getDefault().post(map);
                    } else {
                        aLong = System.currentTimeMillis();
                    }
                }
            }
        }
        return false;
    }

    @Override
    public void onInterrupt() {
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}