首页 > 其他分享 >Android使用AccessibilityService

Android使用AccessibilityService

时间:2022-10-25 23:01:27浏览次数:89  
标签:log type AccessibilityEvent AccessibilityService 使用 Android TYPE event VIEW

介绍

AccessibilityService设计初衷在于帮助残障用户使用android设备和应用,在后台运行,可以监听用户界面的一些状态转换,例如页面切换、焦点改变、通知、Toast等,并在触发AccessibilityEvents时由系统接收回调。后来被开发者另辟蹊径,用于一些插件开发,比如微信红包助手,还有一些需要监听第三方应用的插件。

AcyService 

import android.accessibilityservice.AccessibilityService;
import android.view.accessibility.AccessibilityEvent;

public class AcyService extends AccessibilityService {

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        PrintUtils.printEvent(event);
    }


    @Override
    public void onInterrupt() {
        PrintUtils.log("onInterrupt");
    }

    @Override
    protected boolean onGesture(int gestureId) {
        PrintUtils.log("onGesture");
        return super.onGesture(gestureId);
    }

    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        PrintUtils.log("onServiceConnected");

    }


}

所有用法输出,代码是这个人的,我们这行,代码都是祖传,一个人写的代码,几万人用毫不夸张

/**
* Created by _SOLID
* Date:2016/7/21
* Time:11:14
*/
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;

public class PrintUtils {
    public static void log(CharSequence log) {
        Log.i("test", log + "");
    }

    public static void printEvent(AccessibilityEvent event) {
        log("-------------------------------------------------------------");
        int eventType = event.getEventType();
        log("packageName:" + event.getPackageName() + "");
        log("source:" + event.getSource() + "");
        log("source class:" + event.getClassName() + "");
        log("event type(int):" + eventType + "");

        switch (eventType) {
            case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:// 通知栏事件
                log("event type:TYPE_NOTIFICATION_STATE_CHANGED");
                break;
            case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED://窗体状态改变
                log("event type:TYPE_WINDOW_STATE_CHANGED");
                break;
            case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED://View获取到焦点
                log("event type:TYPE_VIEW_ACCESSIBILITY_FOCUSED");
                break;
            case AccessibilityEvent.TYPE_GESTURE_DETECTION_START:
                log("event type:TYPE_VIEW_ACCESSIBILITY_FOCUSED");
                break;
            case AccessibilityEvent.TYPE_GESTURE_DETECTION_END:
                log("event type:TYPE_GESTURE_DETECTION_END");
                break;
            case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
                log("event type:TYPE_WINDOW_CONTENT_CHANGED");
                break;
            case AccessibilityEvent.TYPE_VIEW_CLICKED:
                log("event type:TYPE_VIEW_CLICKED");
                break;
            case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
                log("event type:TYPE_VIEW_TEXT_CHANGED");
                break;
            case AccessibilityEvent.TYPE_VIEW_SCROLLED:
                log("event type:TYPE_VIEW_SCROLLED");
                break;
            case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:
                log("event type:TYPE_VIEW_TEXT_SELECTION_CHANGED");
                break;
        }

        for (CharSequence txt : event.getText()) {
            log("text:" + txt);
        }

        log("-------------------------------------------------------------");
    }
}

MainActivity

        Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
        startActivity(intent);

manifest文件中添加

   <service
        android:name=".AcyService"
        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/services_config" />
    </service>

services_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="flagReportViewIds"

    android:canRetrieveWindowContent="true"
    android:description="@string/app_name"
    android:notificationTimeout="100" />

GitHub地址 下载前给star

标签:log,type,AccessibilityEvent,AccessibilityService,使用,Android,TYPE,event,VIEW
From: https://www.cnblogs.com/Frank-dev-blog/p/16826707.html

相关文章

  • 使用Spring AOP实现系统操作日志记录
    使用SpringAOP实现系统操作日志记录一、什么是SpringSpring是一个广泛应用的J2EE框架,是针对bean的生命周期进行管理的轻量级容器,主要由SpringCore、SpringAOP、Spri......
  • 746 使用最小花费爬楼梯
    题目746使用最小花费爬楼梯给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以......
  • android实现第一次打开应用的介绍页面
    效果图    添加依赖implementation'com.github.AppIntro:AppIntro:6.2.0'dependencyResolutionManagement{repositoriesMode.set(RepositoriesMo......
  • GitHub Pages站点官方宣布开始使用HTTPS
    数百万人依靠GitHubPages,将其作为他们的网站主机,除此之外,还有数百万人每天访问这些网站。为了更好地保护到GitHubPages站点的通讯,也为了鼓励在因特网上更广泛地采用HT......
  • Android Studio报错:Error:Execution failed for task':app:mergeDebugResources'
    Build失败,原因是我添加的图片不符合AndroidStudio的审核要求,添加两行代码,禁用审核在app目录下的build.gradle中的android{...}增加配置android{.......aaptOptions.crun......
  • Spring基础使用四
    Spring基础使用四FactoryBean概念:FactoryBean是一个接口,需要创建一个类实现该接口其中有三个方法:getObject():通过一个对象交给IOC容器处理getObjectType():设置......
  • this关键字除了在实例方法中,也可以使用在构造方法中
    //this除了可以使用在实例方法中,还可以使用在构造方法中/*需求:1.定义一个日期类,可以表示年月日信息2.需求中要求:如果调用无参数构造方法,默认创建的......
  • 【Java[类的创建与使用]】7-3 学生类定义
    定义一个Student类,含类成员变量:Stringname、Stringgender、intscore、booleanaward,所有的变量为私有(private)。1.编写有参构造函数:对name、gender、score、award赋......
  • 【Java[类的创建与使用]】7-4 设计一个"无名的粉"类
    为“无名的粉”写一个类:classWuMingFen要求:有三个属性:面码:StringtheMa粉的分量(两):intquantity是否带汤:booleanlikeSoup;写一个构造方法,以便于简化初始化过程,如:......
  • 【Java[类的创建与使用]】7-5 设计一个矩形类Rectangle
    编写一个Java应用程序,该程序包含两个类,类的定义如下:(1)一个有关计算矩形面积的类Rectangle,定义如下成员:①两个私有的成员变量:length(长,double类型)、width(宽,double类型);......