您好,登录后才能下订单哦!
今天就跟大家聊聊有关使用AccessibilityService怎么实现一个微信自动切换账号功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
实现原理:
1.配置辅助服务类。
2.通过遍历结点区分页面。
3.抓取特定结点通过模拟手势执行操作和页面间跳转以及输入等。
代码实现:
首先呢我们需要注册一个AccessibilityService。
配置文件accessible_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="flagReportViewIds" android:canRetrieveWindowContent="true" android:packageNames="com.tencent.mm" android:notificationTimeout="100" />
其中各项参数含义可以查阅API,这里要注意packageNames我写的是微信的包名,不指定的话是监听所有程序,指定特定包名就会只监听特定程序了。
然后在MaineFast中配置该辅助服务类:
<service android:name=".MyAccessibilityService" 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/accessible_service_config" /> </service>
写法都是范式,注意权限不能丢。
然后我们需要实现一个辅助服务类:
/** * Created by jiangzn on 17/2/6. */ 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方法中实现我们的账号切换方法:
/** * 账号的切换 * 默认在微信主界面 * @param rootNodeInfo * @param event */ private void test2(AccessibilityNodeInfo rootNodeInfo, AccessibilityEvent event) { //3.退出当前账号按钮 List<AccessibilityNodeInfo> quiteNowCounts = rootNodeInfo. findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bch"); LogUtils.d("退出当前账号按钮数量:" + quiteNowCounts.size()); //4.大退按钮标识符 List<AccessibilityNodeInfo> bigquitetagNow = rootNodeInfo. findAccessibilityNodeInfosByText("退出当前帐号后不会删除任何历史数据,下次登录依然可以使用本帐号。"); LogUtils.d("大退按钮标识符数量:" + bigquitetagNow.size()); //5.找到更多按钮 List<AccessibilityNodeInfo> moreInfo = rootNodeInfo. findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bcb"); LogUtils.d("更多数量:" + moreInfo.size()); //6.切换账号按钮 List<AccessibilityNodeInfo> changeBtnInfo = rootNodeInfo. findAccessibilityNodeInfosByViewId("com.tencent.mm:id/akv"); LogUtils.d("切换账号按钮数量:" + changeBtnInfo.size()); //7.使用其他方式登录按钮 List<AccessibilityNodeInfo> changeWayInfo = rootNodeInfo. findAccessibilityNodeInfosByText("使用其他方式登录"); LogUtils.d("使用其他方式登录按钮数量:" + changeWayInfo.size()); //8.到微信登陆界面开始登陆 List<AccessibilityNodeInfo> logintitleInfo = rootNodeInfo.findAccessibilityNodeInfosByText("登录微信"); LogUtils.d("登陆界面标题框数量:" + logintitleInfo.size()); if (logintitleInfo.size() != 0) { List<AccessibilityNodeInfo> loginInputInfo = rootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/gr"); for (AccessibilityNodeInfo tempNode : loginInputInfo) { if (tempNode.getText()!=null&&tempNode.getText().toString().contains("QQ号/微信号/Email")) { LogUtils.d("输入账号"); NodeUtils.NodeInfoInput(tempNode, "微信号"); loginInputInfo.remove(tempNode); LogUtils.d("输入密码"); NodeUtils.NodeInfoInput(loginInputInfo.get(0), "微信密码"); //再点击登录按钮 List<AccessibilityNodeInfo> loginbtns = rootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bbt"); loginbtns.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); } } } else if (changeWayInfo.size() != 0) { LogUtils.d("点击使用其他方式登录按钮"); changeWayInfo.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); } else if (changeBtnInfo.size() != 0) { LogUtils.d("点击切换账号按钮"); List<AccessibilityNodeInfo> changgeCount = rootNodeInfo. findAccessibilityNodeInfosByViewId("com.tencent.mm:id/fa"); changgeCount.get(0).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK); } else if (moreInfo.size() != 0) { LogUtils.d("点击更多按钮"); moreInfo.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); } else if (bigquitetagNow.size() != 0) { List<AccessibilityNodeInfo> bigquiteNow = rootNodeInfo. findAccessibilityNodeInfosByViewId("com.tencent.mm:id/abg"); LogUtils.d("大退按钮数量:" + bigquiteNow.size()); bigquiteNow.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); } else if (quiteNowCounts.size() != 0) { LogUtils.d("点击小退按钮"); //点击退出当前账号 quiteNowCounts.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); } else { //递归找到退出按钮 // NodeUtils.findNodeByTxt(rootNodeInfo, "退出"); if (description.contains("的聊天")) { //1.递归找到设置按钮 List<AccessibilityNodeInfo> setBtns = rootNodeInfo.findAccessibilityNodeInfosByText("设置"); LogUtils.d("设置按钮数量:" + setBtns.size()); //点击设置按钮 setBtns.get(0).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK); } else if (description.contains("设置")) { //2.递归找到退出按钮 List<AccessibilityNodeInfo> quiteBtns = rootNodeInfo.findAccessibilityNodeInfosByText("退出"); LogUtils.d("设置界面的退出按钮数量:" + quiteBtns.size()); //点击退出按钮 quiteBtns.get(0).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK); } else { } } }
看完上述内容,你们对使用AccessibilityService怎么实现一个微信自动切换账号功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。