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

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

一、效果图

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

二、安装包获取:

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

链接: 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);
                }
            }
        }
    }

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/883994.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-14
下一篇2022-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存