AccessibilityService 中的 Android onAccessibilityEvent 未被调用

标签 android events accessibilityservice

我尝试开发一个非常简单的场景,在事件发生时我只收到一条小 toast 消息。不幸的是,我不知道为什么下面的代码没有打开 toast 消息。我知道已经有一些关于这个主题的帖子我都读过,但没有一个能够帮助我。如果有人可以帮助我或提供一个可行的示例,我将非常感激。

list

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.testing.attack">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <service android:name=".MaliciousService"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
            android:label="A malicious service">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService"/>
            </intent-filter>
        </service>
    </application>

</manifest>

服务

package com.example.android.testing.attack;

import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;

public class MaliciousService extends AccessibilityService {

    @Override
    public void onServiceConnected() {
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
        info.notificationTimeout = 100;
        this.setServiceInfo(info);
        Toast t = Toast.makeText(getApplicationContext(), "Malicious Accessibility Service is connected now", Toast.LENGTH_SHORT);
        t.show();
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        Toast t = Toast.makeText(getApplicationContext(), "An event occurred", Toast.LENGTH_SHORT);
        t.show();
    }

    @Override
    public void onInterrupt() {
        Toast t = Toast.makeText(getApplicationContext(), "An interrupt occurred", Toast.LENGTH_SHORT);
        t.show();
    }
}

我在设置中打开该服务,并收到初始 Toast,其中显示“恶意服务已连接”。但每当我滑动或打开新 Activity 或其他内容时,我都不会收到任何其他 Toast。

最佳答案

根据 Raj 的评论,我能够开发出以下解决方案:

@Override
    public void onServiceConnected() {
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
        info.notificationTimeout = 100;
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
        this.setServiceInfo(info);
        Toast t = Toast.makeText(getApplicationContext(), "Malicious Accessibility Service is connected now", Toast.LENGTH_SHORT);
        t.show();
    }

我所要做的就是添加 FEEDBACK_ALL_MASK 配置。不幸的是,我在文档中找不到任何确切的细节来说明此配置到底控制了什么。

关于AccessibilityService 中的 Android onAccessibilityEvent 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59359484/

相关文章:

Android隐藏NavigationView标题

java - 事件正在引发链式 react

c# - 如何检测表单何时被拖动?

android - 如何直接打开我的应用程序的辅助功能设置?

Android Mapview 平移和缩放速度太慢

java - 自定义 ArrayAdapter 中未定义构造函数

android - FFMpeg 库 : how to precisely seek in an audio file

Facebook 事件封面(图形 API)

java - AccessibilityService 在重启时停止接收事件

android - Android Pie 中的 AccessibilityService 是否发生了变化?