栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用AccessibilityService(无障碍服务)实现各种APP自动打卡功能-更新(2)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用AccessibilityService(无障碍服务)实现各种APP自动打卡功能-更新(2)

一、效果图

补充一下效果图,企业微信版本自动签到,打卡无障碍服务,设置好打卡时间,即可实现自动打卡

二、安装包获取:

可在百度网盘中获取到,支持某钉、企业微信、移动彩云等自动打卡功能

链接: https://pan.baidu.com/s/1TYOd-GxeU-zoFw3eX0Pg6w?pwd=9dm7

提取码: 9dm7

 三、AccessibilityService

Android辅助服务类主要是方便一些试听有障碍的用户实现无障碍服务的工具,直白的说就是通过它可以帮助这些用户更加简单地操作设备,包括文字转语音,触觉反馈,手势操作等等,那么,我们也可以利用该功能实现比如微信自动抢红包、各种软件自动打卡等等各种奇怪的功能。

本文基于一样的原理,实现的是钉钉、移动彩云、企业微信、自动打卡功能。(其实还有实现更酷炫的功能我就不放出来了)

三、实现原理:

1.配置辅助服务类。

2.通过遍历结点区分页面。

3.抓取特定结点通过模拟手势执行操作和页面间跳转以及输入、点击等。

四、部分代码实现:

首先呢我们需要注册一个AccessibilityService。


其中各项参数含义可以查阅API,这里要注意packageNames我写的是某钉的包名,不指定的话是监听所有程序,指定特定包名就会只监听特定程序了。

然后在MaineFast中配置该辅助服务类:


            
                
            
            
        

然后我们需要实现一个辅助服务类:

public class MyAccessibilityService extends AccessibilityService {
 
  @Override
  protected void onServiceConnected() {
    LogUtils.d("onServiceConnected");
  }
 
  String description;
 
  @Override
  public void onAccessibilityEvent(AccessibilityEvent event) {
  }
 
  @Override
  public void onInterrupt() {
    LogUtils.d("onInterrupt");
  }
 
}

最后,在onAccessibilityEvent中去实现业务逻辑即可,可以根据自己的需要实现不同的,例如:

@RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        if (event.getPackageName() != null) {
            nowPackageName = event.getPackageName().toString();
            //获取类名
            className= event.getClassName().toString();
            if(className.contains("com."))
            {
                if(className.contains(nowPackageName))
                {
                    className=className.replace(nowPackageName,"");
                    className=className.replace("..","");
                    if(className.charAt(0)=='.')
                        className=className.substring(1);
                }
                p_c = nowPackageName + className;
                Log.i(TAG, "包名:"+nowPackageName+","+"类名:"+className);
            }
        }

        //判断当前包是否为
        if (nowPackageName!=null && (nowPackageName.equals(CaiyunHandler.packageName)||nowPackageName.equals(DingdingHandler.packageName))) {
            if (MyApplication.getInstance().getFlag()) {
                Log.i(TAG,"收到事件类型ID:"+event.getEventType());
                try{
                    for (BaseHandler handler : list) {
                        if(handler.canHandler(nowPackageName)){
                            handler.doHandle(event,this);
                            break;
                        }
                    }
                }catch (Exception e){
                    Log.e(TAG,"事件处理失败",e);
                }
            }
        }
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871268.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号