Pārlūkot izejas kodu

调试被动添加好友功能;

owen 6 gadi atpakaļ
vecāks
revīzija
a8fb2cad32

+ 30 - 9
app/src/main/java/com/wiipu/marketingrobot/AutoReplyService.java

@@ -368,7 +368,7 @@ public class AutoReplyService extends AccessibilityService implements getCommonV
         //coversationWithAppBrandListView(cwp)-->LinearLayout(b4m)-->...
         // 每一条名称部分的ID为b4o,名称下的消息缩略内容为b4q,头像右上角的带数字小红点为textview,Id为mm
 
-        SystemClock.sleep(3000);
+        SystemClock.sleep(2000);
         AccessibilityNodeInfo root = getRootInActiveWindow();
         // 获取“微信”页面的聊天ListView对象
         // AccessibilityNodeInfo msgLists = AccessibilityHelper.findNodeInfosById(root, "com.tencent.mm:id/cwp");
@@ -431,8 +431,9 @@ public class AutoReplyService extends AccessibilityService implements getCommonV
         //LauncherUIBottomTabView(bn)-->LinearLayout(child 0,无id)-->RelativeLayout(通讯录框框的布局,没有id,child 1,可点击)
         // -->TextView(d3s) 记录了通讯录未加好友数目
 
-        // TODO 添加还未添加的好友
+        // 添加还未添加的好友(被动加好友)
         if (hasUnAddFriend() && enableFriendsCounts != 0) {
+            LogUtils.d("处理好友申请");
             addUnaddFriend();
             return;
         }
@@ -475,19 +476,20 @@ public class AutoReplyService extends AccessibilityService implements getCommonV
         // AccessibilityNodeInfo underTabNode = AccessibilityHelper.findNodeInfosById(root, "com.tencent.mm:id/bn");
         AccessibilityNodeInfo underTabNode = AccessibilityHelper.findNodeInfosById(root, "com.tencent.mm:id/bq");
         if (underTabNode == null) {
-            LogUtils.e(TAG + " doTheUndoWork: underTab is null");
+            LogUtils.e(TAG + " doTheUndoWork: 找不到微信下方tab对象");
             return false;
         }
 
         AccessibilityNodeInfo contractTabNode = underTabNode.getChild(0).getChild(1);
         if (contractTabNode == null) {
-            LogUtils.e(TAG + " doTheUndoWork: contractNode is null");
+            LogUtils.e(TAG + " doTheUndoWork: 找不到微信下方tab中的‘通讯录’对象");
             return false;
         }
 
-        AccessibilityNodeInfo unAddFriendCountNode = AccessibilityHelper.findNodeInfosById(contractTabNode, "com.tencent.mm:id/d3s");
+        // AccessibilityNodeInfo unAddFriendCountNode = AccessibilityHelper.findNodeInfosById(contractTabNode, "com.tencent.mm:id/d3s");
+        AccessibilityNodeInfo unAddFriendCountNode = AccessibilityHelper.findNodeInfosById(contractTabNode, "com.tencent.mm:id/d7a");
         if (unAddFriendCountNode == null) {
-            LogUtils.e(TAG + " addUnaddFriend: unAddCountNode is null");
+            LogUtils.e(TAG + " addUnaddFriend: 没有未添加好友");
             return false;
         }
         CharSequence count = unAddFriendCountNode.getText();
@@ -509,15 +511,17 @@ public class AutoReplyService extends AccessibilityService implements getCommonV
 
         mActionType = actionType.isAddFriend;
         //通讯录界面,整体是个list(m_),第一个子节点是朋友推荐list,包含未加好友那一行的布局id为brc
-        AccessibilityNodeInfo listNode = AccessibilityHelper.findNodeInfosById(root, "com.tencent.mm:id/m_");
+        // AccessibilityNodeInfo listNode = AccessibilityHelper.findNodeInfosById(root, "com.tencent.mm:id/m_");
+        AccessibilityNodeInfo listNode = AccessibilityHelper.findNodeInfosById(root, "com.tencent.mm:id/mi");
         if (listNode == null) {
             LogUtils.e(TAG + " addUnaddFriend: tab view list node is null");
             return;
         }
 
-        AccessibilityNodeInfo unAddFriendNode = AccessibilityHelper.findNodeInfosById(listNode, "com.tencent.mm:id/brc");
+        // AccessibilityNodeInfo unAddFriendNode = AccessibilityHelper.findNodeInfosById(listNode, "com.tencent.mm:id/brc");
+        AccessibilityNodeInfo unAddFriendNode = AccessibilityHelper.findNodeInfosById(listNode, "com.tencent.mm:id/bta");
         if (unAddFriendNode == null) {
-            LogUtils.e(TAG + " addUnaddFriend: unaddFriend node is null");
+            LogUtils.e(TAG + " addUnaddFriend: 申请添加好友对象为空");
             return;
         }
 
@@ -612,6 +616,15 @@ public class AutoReplyService extends AccessibilityService implements getCommonV
             //addFriendError = true;
             mHandleChat.setAddFriendError(true);
             mAddGroupFunction.setAddFriendError(true);
+            AccessibilityNodeInfo root = getRootInActiveWindow();
+            if (null != root){
+                AccessibilityNodeInfo addFriendSenderName = AccessibilityHelper.findNodeInfosById(root,"com.tencent.mm:id/e0s");
+                if (null != addFriendSenderName){
+                    LogUtils.d("已处理完微信昵称为 " + addFriendSenderName.getText().toString() + " 的好友申请");
+                    mAddFriendFunction.setmCurrentSenderName(addFriendSenderName.getText().toString());
+                }
+                AccessibilityHelper.performBack(mAutoReplyService);
+            }
 
         }
         if (event.getText().get(0).toString().contains("已发送")) {
@@ -623,6 +636,14 @@ public class AutoReplyService extends AccessibilityService implements getCommonV
         if (event.getText().get(0).toString().contains("添加联系人失败") || event.getText().get(0).toString().contains("发送失败")) {
             //do someting
             mHandleChat.setFriendSend(true);
+            AccessibilityNodeInfo root = getRootInActiveWindow();
+            if (null != root){
+                AccessibilityNodeInfo addFriendSenderName = AccessibilityHelper.findNodeInfosById(root,"com.tencent.mm:id/e0s");
+                if (null != addFriendSenderName){
+                    LogUtils.d("已处理完微信昵称为 " + addFriendSenderName.getText().toString() + " 的好友申请");
+                    mAddFriendFunction.setmCurrentSenderName(addFriendSenderName.getText().toString());
+                }
+            }
             AccessibilityHelper.performBack(mAutoReplyService);
         }
     }

+ 6 - 0
app/src/main/java/com/wiipu/marketingrobot/Constants.java

@@ -16,6 +16,12 @@ public class Constants {
     public static final String KEY_FIRST_ANSWER = "first_answer";
 
 
+    /**
+     * 公用的微信控件名称
+     */
+
+
+
 
 
 

+ 73 - 28
app/src/main/java/com/wiipu/marketingrobot/function/addFriendFunction.java

@@ -28,6 +28,7 @@ import com.wiipu.marketingrobot.widget.AccessibilityHelper;
 import com.wiipu.netlib.rxbus.RxBus;
 import com.wiipu.netlib.utils.LogUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import static android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_BACK;
@@ -45,16 +46,36 @@ public class addFriendFunction implements replyContract.View , getCommonValueCon
     private replyPresenter mReplyPresenter;
     private getCommonValuePresenter mGetCommonValuePresenter;
     private LoginPresenter mLoginPresenter;
-    private String reply;
+
+    private String mCurrentSenderName = ""; // 当前已发送接受好友申请的用户
+    private List<String> mCurrentSenderNameList = new ArrayList<>(); // 当前已发送接受好友申请用户集合
     private boolean needGetSelfInfo;
-    private static final String threePointInLanucher="com.tencent.mm:id/jr";//聊天界面右上角三个点
-    private static final String chatFriendInfoName="com.tencent.mm:id/b2x";//点开详细信息的聊天对象微信名
-    private static final String chatNameInLeftUp="com.tencent.mm:id/jw";//聊天界面左上角的微信名
-    private static final String chatRoomNewCi7List="com.tencent.mm:id/d4l";//新的ci7list
+
+    public String getmCurrentSenderName() {
+        return mCurrentSenderName;
+    }
+
+    public void setmCurrentSenderName(String mCurrentSenderName) {
+        this.mCurrentSenderName = mCurrentSenderName;
+    }
+
+    // 微信版本 1380
+//    private static final String threePointInLauncher ="com.tencent.mm:id/jr";//聊天界面右上角三个点
+//    private static final String chatFriendInfoName="com.tencent.mm:id/b2x";//点开详细信息的聊天对象微信名
+//    private static final String chatNameInLeftUp="com.tencent.mm:id/jw";//聊天界面左上角的微信名
+//    private static final String chatRoomNewCi7List="com.tencent.mm:id/d4l";//新的ci7list
     private static final String chatListMem="com.tencent.mm:id/nj";//聊天列表头像的id
-    private static final String savedRobotName="robotName";
-    private static final String savedRobotNum="robotNum";
-    private static final String savedRobotId="robotId";
+
+    // 微信版本 1400
+    private static final String threePointInLauncher = "com.tencent.mm:id/jy";
+    private static final String chatMyMem = "com.tencent.mm:id/ns";// 聊天列表头像的id
+    private static final String chatRoomNewCi7List = "com.tencent.mm:id/d84";//新的ci7list
+    private static final String chatNameInLeftUp = "com.tencent.mm:id/k3";//聊天界面左上角的微信名
+
+
+    private static final String savedRobotName = "robotName";
+    private static final String savedRobotNum = "robotNum";
+    private static final String savedRobotId = "robotId";
     private SharedPreferences pref;
     public addFriendFunction(AccessibilityService service) {
         mService = service;
@@ -121,11 +142,36 @@ public class addFriendFunction implements replyContract.View , getCommonValueCon
         if (event.getClassName().equals("com.tencent.mm.plugin.subapp.ui.friend.FMessageConversationUI")) {
             AccessibilityNodeInfo nodeInfo = mService.getRootInActiveWindow();
             if (nodeInfo != null) {
-                List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("接受");
-                if (list != null && list.size() > 0) {
-                    for (AccessibilityNodeInfo n : list) {
-                        //n.performAction(AccessibilityNodeInfo.ACTION_CLICK);
-                        AccessibilityHelper.performClick(n);
+                if (null != mCurrentSenderName) {
+                    if (!mCurrentSenderName.isEmpty()) {
+                        mCurrentSenderNameList.add(mCurrentSenderName);
+                    }
+                    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("接受");
+                    if (list != null && list.size() > 0) {
+                        for (AccessibilityNodeInfo acceptBtn : list) {
+                            // 找到申请好友的用户微信昵称
+                            AccessibilityNodeInfo userName = AccessibilityHelper.findNodeInfosById(nodeInfo,"com.tencent.mm:id/btl");
+                            if (null != userName) {
+                                boolean isSend = false;
+                                for (String uName : mCurrentSenderNameList){
+                                    if (uName.equals(userName.getText().toString())){
+                                        isSend = true;
+                                        break;
+                                    }
+                                }
+                                if (!isSend) {
+
+                                    LogUtils.d("点击 接受 添加好友");
+
+                                    AccessibilityHelper.performClick(acceptBtn);
+                                }else {
+
+                                    LogUtils.e("已经处理过该微信用户 :  "
+                                            + userName.getText().toString() + " 的好友申请了");
+
+                                }
+                            }
+                        }
                     }
                 }
                 mService.performGlobalAction(GLOBAL_ACTION_BACK);
@@ -133,9 +179,8 @@ public class addFriendFunction implements replyContract.View , getCommonValueCon
         }
 
         if (event.getClassName().equals("com.tencent.mm.ui.LauncherUI")) {
-            //这个页面不会调用,很奇妙。
-            //event.setClassName("com.tencent.mm.plugin.subapp.ui.friend.FMessageConversationUI");
-           // addFriend(event);
+            event.setClassName("com.tencent.mm.plugin.subapp.ui.friend.FMessageConversationUI");
+            addFriend(event);
         }
 
         if (event.getClassName().equals("com.tencent.mm.plugin.profile.ui.SayHiWithSnsPermissionUI")) {
@@ -144,7 +189,7 @@ public class addFriendFunction implements replyContract.View , getCommonValueCon
                 List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("完成");
                 if (list != null && list.size() > 0) {
                     for (AccessibilityNodeInfo n : list) {
-                        //n.performAction(AccessibilityNodeInfo.ACTION_CLICK);
+                        LogUtils.d("点击 完成 验证按钮 ");
                         AccessibilityHelper.performClick(n);
                     }
                 }
@@ -182,47 +227,47 @@ public class addFriendFunction implements replyContract.View , getCommonValueCon
                 return;
             }
 
-           if(mmId==null){
-               LogUtils.e(TAG + " addFriend: mm id is null" );
+           if(mmId == null){
+               LogUtils.e(TAG + " 接受好友申请: 用户微信号为空" );
                return;
            }
             String id = mmId.getText().toString();
             id = id.substring(id.indexOf(":")+2, id.length()).trim();
-            LogUtils.d(TAG + " addFriend: the mmid is " + id);
+            LogUtils.d(TAG + " 接受好友申请: 用户微信号为 " + id);
             mmNum = id;
             hasGetmmId = true;
 
             // AccessibilityNodeInfo sendMsg = AccessibilityHelper.findNodeInfosByText(root,"发消息");
-            // TODO 发消息 TextView 的resId 微信版本 1400
+            // 发消息 TextView 的resId 微信版本 1400
             AccessibilityNodeInfo sendMsg = AccessibilityHelper.findNodeInfosById(root,"com.tencent.mm:id/cs");
             if (sendMsg != null) {
-                AccessibilityHelper.performClick(sendMsg);
+                AccessibilityHelper.performClick(sendMsg.getParent().getParent());
             }
         }
 
         if (event.getClassName().equals("com.tencent.mm.ui.chatting.ChattingUI")) {//聊天页面
-            LogUtils.d(TAG + " addFriend: in the chatt ui");
+            LogUtils.d(TAG + " 接受好友申请: 当前为聊天页面 ");
             AccessibilityNodeInfo root = mService.getRootInActiveWindow();
-            AccessibilityNodeInfo more = AccessibilityHelper.findNodeInfosById(root, threePointInLanucher);//右上角三个点
+            AccessibilityNodeInfo more = AccessibilityHelper.findNodeInfosById(root, threePointInLauncher);//右上角三个点
             AccessibilityNodeInfo name = AccessibilityHelper.findNodeInfosById(root, chatNameInLeftUp);//名称
             if (more == null || name == null) {
                 LogUtils.e(TAG + " addFriend: more or name is null");
                 return;
             }
             mmName = name.getText().toString();
-            LogUtils.e(TAG + " addFriend: 1");
+            LogUtils.e(TAG + " 接受好友申请: 1");
             if (!hasGetmmId) {
                 //增加一个延迟,防止点击不到右上角的三个点。
                 SystemClock.sleep(1000);
                 AccessibilityHelper.performClick(more);
                 return;
             }
-            LogUtils.e(TAG + " addFriend: 2" );
+            LogUtils.e(TAG + " 接受好友申请: 2" );
             if (pref.getString(savedRobotName, null) == null || pref.getString(savedRobotNum, null) == null) {
                 getTheRobotInfo(event);
                 return;
             }
-            LogUtils.e(TAG + " addFriend: 3");
+            LogUtils.e(TAG + " 接受好友申请: 3");
             mReplyPresenter.upLoadFriends(mmName, mmNum, pref.getString(savedRobotName, null), pref.getString(savedRobotId, null));
             mGetCommonValuePresenter.getValueByKey(pref.getString(savedRobotId, null),Constants.KEY_MAX_FRIEND_NUM);
 
@@ -314,7 +359,7 @@ public class addFriendFunction implements replyContract.View , getCommonValueCon
             if (text != null) {
                 return findEditText(rootNode, text);
             } else {
-                return findEditText(rootNode, reply);
+                return findEditText(rootNode, "你好");
             }
         }
         return false;