精华内容
参与话题
问答
  • 微信自动打招呼软件可以自动查附近人,自动摇一摇,并且可以自动跟附近人打招呼和摇一摇打招呼。该软件为后台操作,不占用鼠标和键盘,需要安装安卓模拟器。   摇一摇功能的使用是模拟器进入摇一摇页面,然后鼠标...
  • 微信自动打招呼功能

    千次阅读 2016-12-29 10:27:25
    以下是本人根据自动抢红包的实现思路敲的用于微信自动向附近的人打招呼的核心代码 public class AutoService extends AccessibilityService implements View.OnClickListener { private static final String TAG =...
    学习功能强大的AccessibilityService!!!
    以下是本人根据自动抢红包的实现思路敲的用于微信自动向附近的人打招呼的核心代码
    public class AutoService extends AccessibilityService implements View.OnClickListener {
        private static final String TAG = "test";
        /**
         * 微信的包名
         */
        static final String WECHAT_PACKAGENAME = "com.tencent.mm";
        /**
         * 推送消息在通知栏的关键字,设置为推送账号名,如【十点读书】
         */
        static final String PUSH_TEXT_KEY = "十点读书";
        /**
         * 推送链接的关键字,所有推送链接的标题都需要包含此关键字:如【深度好文】
         */
        private static final String URL_TEXT_KEY = "深度好文";
        /**
         * 向附近的人自动打招呼的内容
         */
        private String hello = "测试APP自动打招呼功能,这是一条测试信息";
        boolean startFunc2 = false;//标记是否开启自动添加附近的人为好友的功能;
        int i = 0;//记录已打招呼的人数
        int page=1;//记录附近的人列表页码,初始页码为1
        int prepos = -1;//记录页面跳转来源,0--从附近的人页面跳转到详细资料页,1--从打招呼页面跳转到详细资料页
    
    
    
        @Override
        public void onAccessibilityEvent(final AccessibilityEvent event) {
            int eventType = event.getEventType();
            //通知栏事件
            //自动打开推送的链接
            if (eventType == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
                List<CharSequence> texts = event.getText();
                if (!texts.isEmpty()) {
                    for (CharSequence t : texts) {
                        String text = String.valueOf(t);
                        if (text.contains(PUSH_TEXT_KEY)) {
                            openNotification(event);
                            openDelay(1000, URL_TEXT_KEY);
                        }
                    }
                }
            }
            //自动加人
            if (!startFunc2) {
                return;
            }
            if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && event.getClassName().equals("com.tencent.mm.ui.LauncherUI")) {
                //记录打招呼人数置零
                i = 0;
                //当前在微信聊天页就点开发现
                openNext("发现");
                //然后跳转到附近的人
                openDelay(1000, "附近的人");
            } else if (event.getClassName().equals("com.tencent.mm.plugin.nearby.ui.NearbyFriendsUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                prepos = 0;
                //当前在附近的人界面就点选人打招呼
                AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
                List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("米以内");
                Log.d("name", "附近的人列表人数: " + list.size());
                if (i < (list.size()*page) ){
                    list.get(i%list.size()).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    list.get(i%list.size()).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                } else if (i == list.size()*page) {
                    //本页已全部打招呼,所以下滑列表加载下一页,每次下滑的距离是一屏
                    for (int i = 0; i < nodeInfo.getChild(0).getChildCount(); i++) {
                        if (nodeInfo.getChild(0).getChild(i).getClassName().equals("android.widget.ListView")) {
                            AccessibilityNodeInfo node_lsv = nodeInfo.getChild(0).getChild(i);
                            node_lsv.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
                            page++;
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    try {
                                        Thread.sleep(1000);
                                    } catch (InterruptedException mE) {
                                        mE.printStackTrace();
                                    }
                                    AccessibilityNodeInfo nodeInfo_ = getRootInActiveWindow();
                                    List<AccessibilityNodeInfo> list_ = nodeInfo_.findAccessibilityNodeInfosByText("米以内");
                                    Log.d("name", "列表人数: "+list_.size());
                                    //滑动之后,上一页的最后一个item为当前的第一个item,所以从第二个开始打招呼
                                    list_.get(1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                                    list_.get(1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                                }
                            }).start();
                        }
                    }
                }
            } else if (event.getClassName().equals("com.tencent.mm.plugin.profile.ui.ContactInfoUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                if (prepos == 1) {
                    //从打招呼界面跳转来的,则点击返回到附近的人页面
                    performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                    i++;
                } else if (prepos == 0) {
                    //从附近的人跳转来的,则点击打招呼按钮
                    AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
                    if (nodeInfo == null) {
                        Log.w(TAG, "rootWindow为空");
                        return;
                    }
                    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("打招呼");
                    if (list.size() > 0) {
                        list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                        list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    } else {
                        //如果遇到已加为好友的则界面的“打招呼”变为“发消息",所以直接返回上一个界面并记录打招呼人数+1
                        performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                        i++;
                    }
                }
            } else if (event.getClassName().equals("com.tencent.mm.ui.contact.SayHiEditUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                //当前在打招呼页面
                prepos = 1;
                //输入打招呼的内容并发送
                inputHello(hello);
                openNext("发送");
            }
            //自动从桌面打开微信,利用微信多开助手可实现多个微信账号之间的切换
    //        if(topActivity.equals("com.huawei.android.launcher.Launcher")){
    //            openNext(event,"微信");
    //            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
    //            nodeInfo.getChildCount();
    //            for (int i=0;i<nodeInfo.getChildCount();i++){
    //                String name=nodeInfo.getChild(i).getViewIdResourceName();
    //            }
    //        }
        }
    
        /**
         * 打开通知栏消息
         */
        private void openNotification(AccessibilityEvent event) {
            if (event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {
                return;
            }
            //以下是精华,将微信的通知栏消息打开
            Notification notification = (Notification) event.getParcelableData();
            PendingIntent pendingIntent = notification.contentIntent;
            try {
                pendingIntent.send();
            } catch (PendingIntent.CanceledException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 点击匹配的nodeInfo
         * @param str text关键字
         */
        private void openNext(String str) {
            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            if (nodeInfo == null) {
                Log.w(TAG, "rootWindow为空");
                return;
            }
            List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(str);
            Log.d("name", "匹配个数: " + list.size());
            if (list.size() > 0) {
                list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
            }
    //        if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
    //            //点中了红包,下一步就是去拆红包
    //            checkKey1();
    //        } else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())) {
    //            //拆完红包后看详细的纪录界面
    //        } else if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())) {
    //            //在聊天界面,去点中红包
    //            checkKey2();
    //        }
        }
    
        //延迟打开界面
        private void openDelay(final int delaytime, final String text) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(delaytime);
                    } catch (InterruptedException mE) {
                        mE.printStackTrace();
                    }
                    openNext(text);
                }
            }).start();
        }
    
        //自动输入打招呼内容
        private void inputHello(String hello) {
            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            //找到当前获取焦点的view
            AccessibilityNodeInfo target = nodeInfo.findFocus(AccessibilityNodeInfo.FOCUS_INPUT);
            if (target == null) {
                Log.d(TAG, "inputHello: null");
                return;
            }
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("label", hello);
            clipboard.setPrimaryClip(clip);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                target.performAction(AccessibilityNodeInfo.ACTION_PASTE);
            }
        }
    
        @Override
        public void onInterrupt() {
            Toast.makeText(this, "服务已中断", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        protected void onServiceConnected() {
            super.onServiceConnected();
            Toast.makeText(this, "连接服务", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            createFloatView();
        }
    
        WindowManager wm;
        Button floatbtn;
    
        //创建悬浮按钮
        private void createFloatView() {
            WindowManager.LayoutParams pl = new WindowManager.LayoutParams();
            wm = (WindowManager) getSystemService(getApplication().WINDOW_SERVICE);
            pl.type = WindowManager.LayoutParams.TYPE_PHONE;
            pl.format = PixelFormat.RGBA_8888;
            pl.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
            pl.gravity = Gravity.RIGHT | Gravity.BOTTOM;
            pl.x = 0;
            pl.y = 0;
    
            pl.width = 200;
            pl.height = 200;
    
            LayoutInflater inflater = LayoutInflater.from(this);
            floatbtn = (Button) inflater.inflate(R.layout.floatbtn, null);
            wm.addView(floatbtn, pl);
    
            floatbtn.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            if (startFunc2) {
                floatbtn.setText("启用加人");
            } else {
                floatbtn.setText("停止加人");
            }
            startFunc2 = !startFunc2;
        }
    }

    
    
    启用这个服务的代码:
    //打开系统设置中辅助功能
    Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
    startActivity(intent);
    添加权限: <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />

    展开全文
  • 微信全自动打招呼版 微信营销 微信自动摇一摇 自动打招呼
  • 后台微信自动打招呼bluestacks版本

    热门讨论 2012-11-09 22:05:42
    后台微信自动打招呼bluestacks版本 支持后台运行 鼠标无劫持版本 速度更快 线程更佳
  • 循环自动打招呼,一键设置,自动打招呼基于安卓模拟器 ,源码
  • GPS位置自动切换,实现人离电脑可自动添加全国各地使用微信附近人功 能的人(需安装安卓模拟器bluestacks).(仅支持使用微信5.1以及BlueStacks 0.8.2.3018,旧版本无法实现 自动切换GPS)微信时代已来临 ...
  • 去年写过微信抢红包插件的实现,但是今年春节的时候发现微信更新之后我自己写的插件竟然会停在开红包的页面无法继续向下执行,debug之后发现问题是在该页面通过findAccessibilityNodeInfosByViewId()方法无法获取到...

    先说说遇到的一些问题

    去年写过微信抢红包插件的实现,但是今年春节的时候发现微信更新之后自己写的插件竟然会停在开红包的页面无法继续向下执行,debug之后发现问题是微信团队把开红包按钮的文本内容现在改成了一张图片,导致我使用findAccessibilityNodeInfosByText()找不到有效的子节点,也就无法实现模拟点击去打开红包。
    于是乎我开始尝试通过获取指定控件的ID去实现,迅速打开IDE,使用Android Device Monitor查看开红包按钮的控件id,后面会附上使用方法,然后使用findAccessibilityNodeInfosByViewId()来获取开红包按钮的节点,结果当然是可以的。
    但是这就带来了另一个问题:如果微信每次发版都修改这个按钮的控件id,那我的插件也就只能每次都跟随着修改代码才能正常使用,事实也证明微信的确是每次发版都会修改此控件的id值。
    针对这个问题我目前的做法是开一个ArrayList记录微信开红包button所使用过的id值,然后去遍历id值通过findAccessibilityNodeInfosByViewId()获取节点,当然用map存储id值及其对应微信版本号用来做版本兼容会更好些,谁让我懒呢,懒得去获取微信版本号。当然,还有种暴力的方法,就是遍历开红包页面的节点树并模拟点击其下的每一个能点击的button,因为其实界面里能点击的就只有关闭按钮和开红包按钮,但关闭按钮其实是个imageView而不是button。
    坑总是一个接一个,在最近的微信版本更新后,我发现不仅仅是控件id会发生改变,就连某些activity的名称都被修改了,以及聊天页面对消息推送的处理方式也变了,适配的代码我已经更新到github。
    以后微信红包如果还有其他修改,我会把适配后的代码直接更新到github的demo,所以下方的代码片不一定是最新的,感兴趣的同学可以上github去star一下,demo地址。当然适配过程中遇到的问题我还是会记录在这里。

    核心代码片如下:

    抢红包:

    if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
        //当前在红包待开页面,去拆红包
        getLuckyMoney();
    } else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())) {
        //拆完红包后看详细纪录的界面
        openNext("查看我的红包记录");
    } else if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())) {
        //在聊天界面,去点中红包
        openLuckyEnvelope();
    }

    自动加人:

    if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && event.getClassName().equals("com.tencent.mm.ui.LauncherUI")) {
        //记录打招呼人数置零
        i = 0;
        //当前在微信聊天页就点开发现
        openNext("发现");
        //然后跳转到附近的人
        openDelay(1000, "附近的人");
    } else if (event.getClassName().equals("com.tencent.mm.plugin.nearby.ui.NearbyFriendsUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
        prepos = 0;
        //当前在附近的人界面就点选人打招呼
        AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
        List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("米以内");
        Log.d("name", "附近的人列表人数: " + list.size());
        if (i < (list.size() * page)) {
            list.get(i % list.size()).performAction(AccessibilityNodeInfo.ACTION_CLICK);
            list.get(i % list.size()).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
        } else if (i == list.size() * page) {
            //本页已全部打招呼,所以下滑列表加载下一页,每次下滑的距离是一屏
            for (int i = 0; i < nodeInfo.getChild(0).getChildCount(); i++) {
                if (nodeInfo.getChild(0).getChild(i).getClassName().equals("android.widget.ListView")) {
                    AccessibilityNodeInfo node_lsv = nodeInfo.getChild(0).getChild(i);
                    node_lsv.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
                    page++;
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException mE) {
                                mE.printStackTrace();
                            }
                            AccessibilityNodeInfo nodeInfo_ = getRootInActiveWindow();
                            List<AccessibilityNodeInfo> list_ = nodeInfo_.findAccessibilityNodeInfosByText("米以内");
                            Log.d("name", "列表人数: " + list_.size());
                            //滑动之后,上一页的最后一个item为当前的第一个item,所以从第二个开始打招呼
                            list_.get(1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                            list_.get(1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                        }
                    }).start();
                }
            }
        }
    } else if (event.getClassName().equals("com.tencent.mm.plugin.profile.ui.ContactInfoUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
        if (prepos == 1) {
            //从打招呼界面跳转来的,则点击返回到附近的人页面
            performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
            i++;
        } else if (prepos == 0) {
            //从附近的人跳转来的,则点击打招呼按钮
            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            if (nodeInfo == null) {
                Log.w(TAG, "rootWindow为空");
                return;
            }
            List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("打招呼");
            if (list.size() > 0) {
                list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
            } else {
                //如果遇到已加为好友的则界面的“打招呼”变为“发消息",所以直接返回上一个界面并记录打招呼人数+1
                performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                i++;
            }
        }
    } else if (event.getClassName().equals("com.tencent.mm.ui.contact.SayHiEditUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
        //当前在打招呼页面
        prepos = 1;
        //输入打招呼的内容并发送
        inputHello(hello);
        openNext("发送");
    }

    /**
     * 打开通知栏消息
     */
    private void openNotification(AccessibilityEvent event) {
        if (event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {
            return;
        }
        //将通知栏消息打开
        Notification notification = (Notification) event.getParcelableData();
        PendingIntent pendingIntent = notification.contentIntent;
        try {
            pendingIntent.send();
        } catch (PendingIntent.CanceledException e) {
            e.printStackTrace();
        }
    }

    /**
     * 点击匹配的nodeInfo
     *
     * @param str text关键字
     */
    private void openNext(String str) {
        AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
        if (nodeInfo == null) {
            Log.w(TAG, "rootWindow为空");
            Toast.makeText(this, "rootWindow为空", Toast.LENGTH_SHORT).show();
            return;
        }
        List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(str);
        Log.d("name", "匹配个数: " + list.size());
        if (list.size() > 0) {
            list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
            list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
        } else {
            Toast.makeText(this, "找不到有效的节点", Toast.LENGTH_SHORT).show();
        }
    }

    //自动输入打招呼内容
    private void inputHello(String hello) {
        AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
        //找到当前获取焦点的view
        AccessibilityNodeInfo target = nodeInfo.findFocus(AccessibilityNodeInfo.FOCUS_INPUT);
        if (target == null) {
            Log.d(TAG, "inputHello: null");
            return;
        }
        ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("label", hello);
        clipboard.setPrimaryClip(clip);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            target.performAction(AccessibilityNodeInfo.ACTION_PASTE);
        }
    }

    关于如何获取app页面中控件的id在Android Studio中开启Android Device Monitor,选择设备后点击Dump View Hierarchy for UI Automator即可查看



    关于使用AccessibilityService前的配置:

    在manifest中的配置:
    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
    

    <service
        android:enabled="true"
        android:exported="true"
        android:label="@string/app_name"
        android:name=".AutoService"
        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/envelope_service_config"/>
    </service>
    meta-data中的xml资源文件:

    <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
        android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged"
        android:accessibilityFeedbackType="feedbackGeneric"
        android:accessibilityFlags=""
        android:canRetrieveWindowContent="true"
        android:description="@string/app_name"
        android:notificationTimeout="100"
        android:packageNames="com.tencent.mm,com.huawei.android.launcher" />  

    其中:

     packageName用于配置你想要监测的包名,如果多个则用逗号隔开,未配置此项时默认监测所有程序

    accessibilityEventTypes表示该服务可监测界面中哪些事件类型,如窗口打开,滑动等,具体值可查看api

    accessibilityFeedbackType 表示反馈方式,比如是语音播放,还是震动

    canRetrieveWindowContent 表示该服务能否访问活动窗口中的内容,为false时getRootInActiveWindow()获取结果为null

    notificationTimeout 接受事件的时间间隔


    当然,除了以meta-data的方式静态配置,也可通过在服务启动时的onServiceConnected()方法中调用setServiceInfo(AccessibilityServiceInfo)进行动态配置。


    接下来,或许你可以自己尝试下使用AccessibilityService实现app的自动安装/批量安装,去学习吧,骚年!

    demo地址:点击打开链接


    补充:

    几种常用accessibilityEventType事件类型:

    TYPE_WINDOW_STATE_CHANGED	窗口状态改变事件类型,打开PopupWindow、dialog、menu等
    TYPE_NOTIFICATION_STATE_CHANGED		通知栏事件
    TYPE_WINDOW_CONTENT_CHANGED		窗口中内容改变
    TYPE_VIEW_SCROLLED		控件滑动事件
    TYPE_WINDOWS_CHANGED		显示窗口改变
    TYPE_VIEW_TEXT_CHANGED		editText控件的内容发生改变
    TYPE_TOUCH_INTERACTION_START		用户开始触摸屏幕
    TYPE_TOUCH_INTERACTION_END		用户停止触摸屏幕
    其中TYPE_WINDOW_CONTENT_CHANGED	又可以细分为4个二级类型:	
    1.CONTENT_CHANGE_TYPE_SUBTREE	节点发生增减
    2.CONTENT_CHANGE_TYPE_TEXT	节点文本发生改变
    3.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION		节点的内容描述发生改变,即控件的contentDescription属性发生改变
    4.CONTENT_CHANGE_TYPE_UNDEFINED	未定义类型,即除上面三种之外的类型

    展开全文
  • 主要为大家详细介绍了实现微信自动向附近的人打招呼,实现收到指定账户推送文章时自动进入微信打开链接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用前务必查看帮助文档 GPS位置自动切换,实现人离电脑可自动添加全国各地使用微信附近人功 能的人.(仅支持使用微信5.1以及BlueStacks 0.8.2.3018,旧版本无法实现 自动切换GPS) Bluestack下载地址: ...
  • 使用前务必查看帮助文档 GPS位置自动切换,实现人离电脑...能的人,自动添加打招呼内容(需安装安卓模拟器bluestacks).(仅支持使用微信5.1以及BlueStacks 0.8.2.3018,旧版本无法实现 自动切换GPS)微信时代已来临
  • 以下是本人根据自动抢红包的实现思路敲的用于微信自动向附近的人打招呼的核心代码 public class AutoService extends AccessibilityService implements View.OnClickListener { private static final String TAG
    学习功能强大的AccessibilityService!!!
    以下是本人根据自动抢红包的实现思路敲的用于微信自动向附近的人打招呼的核心代码
    public class AutoService extends AccessibilityService implements View.OnClickListener {
        private static final String TAG = "test";
        /**
         * 微信的包名
         */
        static final String WECHAT_PACKAGENAME = "com.tencent.mm";
        /**
         * 推送消息在通知栏的关键字,设置为推送账号名,如【十点读书】
         */
        static final String PUSH_TEXT_KEY = "十点读书";
        /**
         * 推送链接的关键字,所有推送链接的标题都需要包含此关键字:如【深度好文】
         */
        private static final String URL_TEXT_KEY = "深度好文";
        /**
         * 向附近的人自动打招呼的内容
         */
        private String hello = "测试APP自动打招呼功能,这是一条测试信息";
        boolean startFunc2 = false;//标记是否开启自动添加附近的人为好友的功能;
        int i = 0;//记录已打招呼的人数
        int page=1;//记录附近的人列表页码,初始页码为1
        int prepos = -1;//记录页面跳转来源,0--从附近的人页面跳转到详细资料页,1--从打招呼页面跳转到详细资料页
    
    
    
        @Override
        public void onAccessibilityEvent(final AccessibilityEvent event) {
            int eventType = event.getEventType();
            //通知栏事件
            //自动打开推送的链接
            if (eventType == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
                List<CharSequence> texts = event.getText();
                if (!texts.isEmpty()) {
                    for (CharSequence t : texts) {
                        String text = String.valueOf(t);
                        if (text.contains(PUSH_TEXT_KEY)) {
                            openNotification(event);
                            openDelay(1000, URL_TEXT_KEY);
                        }
                    }
                }
            }
            //自动加人
            if (!startFunc2) {
                return;
            }
            if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && event.getClassName().equals("com.tencent.mm.ui.LauncherUI")) {
                //记录打招呼人数置零
                i = 0;
                //当前在微信聊天页就点开发现
                openNext("发现");
                //然后跳转到附近的人
                openDelay(1000, "附近的人");
            } else if (event.getClassName().equals("com.tencent.mm.plugin.nearby.ui.NearbyFriendsUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                prepos = 0;
                //当前在附近的人界面就点选人打招呼
                AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
                List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("米以内");
                Log.d("name", "附近的人列表人数: " + list.size());
                if (i < (list.size()*page) ){
                    list.get(i%list.size()).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    list.get(i%list.size()).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                } else if (i == list.size()*page) {
                    //本页已全部打招呼,所以下滑列表加载下一页,每次下滑的距离是一屏
                    for (int i = 0; i < nodeInfo.getChild(0).getChildCount(); i++) {
                        if (nodeInfo.getChild(0).getChild(i).getClassName().equals("android.widget.ListView")) {
                            AccessibilityNodeInfo node_lsv = nodeInfo.getChild(0).getChild(i);
                            node_lsv.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
                            page++;
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    try {
                                        Thread.sleep(1000);
                                    } catch (InterruptedException mE) {
                                        mE.printStackTrace();
                                    }
                                    AccessibilityNodeInfo nodeInfo_ = getRootInActiveWindow();
                                    List<AccessibilityNodeInfo> list_ = nodeInfo_.findAccessibilityNodeInfosByText("米以内");
                                    Log.d("name", "列表人数: "+list_.size());
                                    //滑动之后,上一页的最后一个item为当前的第一个item,所以从第二个开始打招呼
                                    list_.get(1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                                    list_.get(1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                                }
                            }).start();
                        }
                    }
                }
            } else if (event.getClassName().equals("com.tencent.mm.plugin.profile.ui.ContactInfoUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                if (prepos == 1) {
                    //从打招呼界面跳转来的,则点击返回到附近的人页面
                    performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                    i++;
                } else if (prepos == 0) {
                    //从附近的人跳转来的,则点击打招呼按钮
                    AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
                    if (nodeInfo == null) {
                        Log.w(TAG, "rootWindow为空");
                        return;
                    }
                    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("打招呼");
                    if (list.size() > 0) {
                        list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                        list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    } else {
                        //如果遇到已加为好友的则界面的“打招呼”变为“发消息",所以直接返回上一个界面并记录打招呼人数+1
                        performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                        i++;
                    }
                }
            } else if (event.getClassName().equals("com.tencent.mm.ui.contact.SayHiEditUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                //当前在打招呼页面
                prepos = 1;
                //输入打招呼的内容并发送
                inputHello(hello);
                openNext("发送");
            }
            //自动从桌面打开微信,利用微信多开助手可实现多个微信账号之间的切换
    //        if(topActivity.equals("com.huawei.android.launcher.Launcher")){
    //            openNext(event,"微信");
    //            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
    //            nodeInfo.getChildCount();
    //            for (int i=0;i<nodeInfo.getChildCount();i++){
    //                String name=nodeInfo.getChild(i).getViewIdResourceName();
    //            }
    //        }
        }
    
        /**
         * 打开通知栏消息
         */
        private void openNotification(AccessibilityEvent event) {
            if (event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {
                return;
            }
            //以下是精华,将微信的通知栏消息打开
            Notification notification = (Notification) event.getParcelableData();
            PendingIntent pendingIntent = notification.contentIntent;
            try {
                pendingIntent.send();
            } catch (PendingIntent.CanceledException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 点击匹配的nodeInfo
         * @param str text关键字
         */
        private void openNext(String str) {
            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            if (nodeInfo == null) {
                Log.w(TAG, "rootWindow为空");
                return;
            }
            List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(str);
            Log.d("name", "匹配个数: " + list.size());
            if (list.size() > 0) {
                list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
            }
    //        if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
    //            //点中了红包,下一步就是去拆红包
    //            checkKey1();
    //        } else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())) {
    //            //拆完红包后看详细的纪录界面
    //        } else if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())) {
    //            //在聊天界面,去点中红包
    //            checkKey2();
    //        }
        }
    
        //延迟打开界面
        private void openDelay(final int delaytime, final String text) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(delaytime);
                    } catch (InterruptedException mE) {
                        mE.printStackTrace();
                    }
                    openNext(text);
                }
            }).start();
        }
    
        //自动输入打招呼内容
        private void inputHello(String hello) {
            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            //找到当前获取焦点的view
            AccessibilityNodeInfo target = nodeInfo.findFocus(AccessibilityNodeInfo.FOCUS_INPUT);
            if (target == null) {
                Log.d(TAG, "inputHello: null");
                return;
            }
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("label", hello);
            clipboard.setPrimaryClip(clip);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                target.performAction(AccessibilityNodeInfo.ACTION_PASTE);
            }
        }
    
        @Override
        public void onInterrupt() {
            Toast.makeText(this, "服务已中断", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        protected void onServiceConnected() {
            super.onServiceConnected();
            Toast.makeText(this, "连接服务", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            createFloatView();
        }
    
        WindowManager wm;
        Button floatbtn;
    
        //创建悬浮按钮
        private void createFloatView() {
            WindowManager.LayoutParams pl = new WindowManager.LayoutParams();
            wm = (WindowManager) getSystemService(getApplication().WINDOW_SERVICE);
            pl.type = WindowManager.LayoutParams.TYPE_PHONE;
            pl.format = PixelFormat.RGBA_8888;
            pl.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
            pl.gravity = Gravity.RIGHT | Gravity.BOTTOM;
            pl.x = 0;
            pl.y = 0;
    
            pl.width = 200;
            pl.height = 200;
    
            LayoutInflater inflater = LayoutInflater.from(this);
            floatbtn = (Button) inflater.inflate(R.layout.floatbtn, null);
            wm.addView(floatbtn, pl);
    
            floatbtn.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            if (startFunc2) {
                floatbtn.setText("启用加人");
            } else {
                floatbtn.setText("停止加人");
            }
            startFunc2 = !startFunc2;
        }
    }

    
    
    启用这个服务的代码:
    //打开系统设置中辅助功能
    Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
    startActivity(intent);
    添加权限: <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
    如果发现代码有问题,请留言,或者遇到哪里没明白的也可以在留言里交流沟通,本人看到了一定回复
    demo地址:点击打开链接

    展开全文
  • 以下是本人根据自动抢红包的实现思路敲的用于微信自动向附近的人打招呼的核心代码 public class AutoService extends AccessibilityService implements View.OnClickListener { private static final String TAG =...
    学习功能强大的AccessibilityService!!!
    以下是本人根据自动抢红包的实现思路敲的用于微信自动向附近的人打招呼的核心代码
    public class AutoService extends AccessibilityService implements View.OnClickListener {
        private static final String TAG = "test";
        /**
         * 微信的包名
         */
        static final String WECHAT_PACKAGENAME = "com.tencent.mm";
        /**
         * 推送消息在通知栏的关键字,设置为推送账号名,如【十点读书】
         */
        static final String PUSH_TEXT_KEY = "十点读书";
        /**
         * 推送链接的关键字,所有推送链接的标题都需要包含此关键字:如【深度好文】
         */
        private static final String URL_TEXT_KEY = "深度好文";
        /**
         * 向附近的人自动打招呼的内容
         */
        private String hello = "测试APP自动打招呼功能,这是一条测试信息";
        boolean startFunc2 = false;//标记是否开启自动添加附近的人为好友的功能;
        int i = 0;//记录已打招呼的人数
        int page=1;//记录附近的人列表页码,初始页码为1
        int prepos = -1;//记录页面跳转来源,0--从附近的人页面跳转到详细资料页,1--从打招呼页面跳转到详细资料页
    
    
    
        @Override
        public void onAccessibilityEvent(final AccessibilityEvent event) {
            int eventType = event.getEventType();
            //通知栏事件
            //自动打开推送的链接
            if (eventType == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
                List<CharSequence> texts = event.getText();
                if (!texts.isEmpty()) {
                    for (CharSequence t : texts) {
                        String text = String.valueOf(t);
                        if (text.contains(PUSH_TEXT_KEY)) {
                            openNotification(event);
                            openDelay(1000, URL_TEXT_KEY);
                        }
                    }
                }
            }
            //自动加人
            if (!startFunc2) {
                return;
            }
            if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && event.getClassName().equals("com.tencent.mm.ui.LauncherUI")) {
                //记录打招呼人数置零
                i = 0;
                //当前在微信聊天页就点开发现
                openNext("发现");
                //然后跳转到附近的人
                openDelay(1000, "附近的人");
            } else if (event.getClassName().equals("com.tencent.mm.plugin.nearby.ui.NearbyFriendsUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                prepos = 0;
                //当前在附近的人界面就点选人打招呼
                AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
                List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("米以内");
                Log.d("name", "附近的人列表人数: " + list.size());
                if (i < (list.size()*page) ){
                    list.get(i%list.size()).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    list.get(i%list.size()).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                } else if (i == list.size()*page) {
                    //本页已全部打招呼,所以下滑列表加载下一页,每次下滑的距离是一屏
                    for (int i = 0; i < nodeInfo.getChild(0).getChildCount(); i++) {
                        if (nodeInfo.getChild(0).getChild(i).getClassName().equals("android.widget.ListView")) {
                            AccessibilityNodeInfo node_lsv = nodeInfo.getChild(0).getChild(i);
                            node_lsv.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
                            page++;
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    try {
                                        Thread.sleep(1000);
                                    } catch (InterruptedException mE) {
                                        mE.printStackTrace();
                                    }
                                    AccessibilityNodeInfo nodeInfo_ = getRootInActiveWindow();
                                    List<AccessibilityNodeInfo> list_ = nodeInfo_.findAccessibilityNodeInfosByText("米以内");
                                    Log.d("name", "列表人数: "+list_.size());
                                    //滑动之后,上一页的最后一个item为当前的第一个item,所以从第二个开始打招呼
                                    list_.get(1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                                    list_.get(1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                                }
                            }).start();
                        }
                    }
                }
            } else if (event.getClassName().equals("com.tencent.mm.plugin.profile.ui.ContactInfoUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                if (prepos == 1) {
                    //从打招呼界面跳转来的,则点击返回到附近的人页面
                    performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                    i++;
                } else if (prepos == 0) {
                    //从附近的人跳转来的,则点击打招呼按钮
                    AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
                    if (nodeInfo == null) {
                        Log.w(TAG, "rootWindow为空");
                        return;
                    }
                    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("打招呼");
                    if (list.size() > 0) {
                        list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                        list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    } else {
                        //如果遇到已加为好友的则界面的“打招呼”变为“发消息",所以直接返回上一个界面并记录打招呼人数+1
                        performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                        i++;
                    }
                }
            } else if (event.getClassName().equals("com.tencent.mm.ui.contact.SayHiEditUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                //当前在打招呼页面
                prepos = 1;
                //输入打招呼的内容并发送
                inputHello(hello);
                openNext("发送");
            }
            //自动从桌面打开微信,利用微信多开助手可实现多个微信账号之间的切换
    //        if(topActivity.equals("com.huawei.android.launcher.Launcher")){
    //            openNext(event,"微信");
    //            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
    //            nodeInfo.getChildCount();
    //            for (int i=0;i<nodeInfo.getChildCount();i++){
    //                String name=nodeInfo.getChild(i).getViewIdResourceName();
    //            }
    //        }
        }
    
        /**
         * 打开通知栏消息
         */
        private void openNotification(AccessibilityEvent event) {
            if (event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {
                return;
            }
            //以下是精华,将微信的通知栏消息打开
            Notification notification = (Notification) event.getParcelableData();
            PendingIntent pendingIntent = notification.contentIntent;
            try {
                pendingIntent.send();
            } catch (PendingIntent.CanceledException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 点击匹配的nodeInfo
         * @param str text关键字
         */
        private void openNext(String str) {
            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            if (nodeInfo == null) {
                Log.w(TAG, "rootWindow为空");
                return;
            }
            List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(str);
            Log.d("name", "匹配个数: " + list.size());
            if (list.size() > 0) {
                list.get(list.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                list.get(list.size() - 1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
            }
    //        if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
    //            //点中了红包,下一步就是去拆红包
    //            checkKey1();
    //        } else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())) {
    //            //拆完红包后看详细的纪录界面
    //        } else if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())) {
    //            //在聊天界面,去点中红包
    //            checkKey2();
    //        }
        }
    
        //延迟打开界面
        private void openDelay(final int delaytime, final String text) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(delaytime);
                    } catch (InterruptedException mE) {
                        mE.printStackTrace();
                    }
                    openNext(text);
                }
            }).start();
        }
    
        //自动输入打招呼内容
        private void inputHello(String hello) {
            AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            //找到当前获取焦点的view
            AccessibilityNodeInfo target = nodeInfo.findFocus(AccessibilityNodeInfo.FOCUS_INPUT);
            if (target == null) {
                Log.d(TAG, "inputHello: null");
                return;
            }
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("label", hello);
            clipboard.setPrimaryClip(clip);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                target.performAction(AccessibilityNodeInfo.ACTION_PASTE);
            }
        }
    
        @Override
        public void onInterrupt() {
            Toast.makeText(this, "服务已中断", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        protected void onServiceConnected() {
            super.onServiceConnected();
            Toast.makeText(this, "连接服务", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            createFloatView();
        }
    
        WindowManager wm;
        Button floatbtn;
    
        //创建悬浮按钮
        private void createFloatView() {
            WindowManager.LayoutParams pl = new WindowManager.LayoutParams();
            wm = (WindowManager) getSystemService(getApplication().WINDOW_SERVICE);
            pl.type = WindowManager.LayoutParams.TYPE_PHONE;
            pl.format = PixelFormat.RGBA_8888;
            pl.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
            pl.gravity = Gravity.RIGHT | Gravity.BOTTOM;
            pl.x = 0;
            pl.y = 0;
    
            pl.width = 200;
            pl.height = 200;
    
            LayoutInflater inflater = LayoutInflater.from(this);
            floatbtn = (Button) inflater.inflate(R.layout.floatbtn, null);
            wm.addView(floatbtn, pl);
    
            floatbtn.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            if (startFunc2) {
                floatbtn.setText("启用加人");
            } else {
                floatbtn.setText("停止加人");
            }
            startFunc2 = !startFunc2;
        }
    }

    
    
    启用这个服务的代码:
    //打开系统设置中辅助功能
    Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
    startActivity(intent);
    添加权限: <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
    
    
    如果发现代码有问题,请留言,或者遇到哪里没明白的也可以在留言里交流沟通,本人看到了一定回复
    demo地址:点击打开链接
    展开全文
  • 微信营销怎么打招呼

    2020-11-05 18:50:43
    微信营销怎么打招呼? 1.通讯录导入粉丝。微商可以直接将通讯录中的微信好友导入,可以利用一些导航导入的软件,将自己的通信好友转化成自己的微信好友。 2.群爆粉软件。微商可以直接利用软件在精准的粉丝群中...
  • 操作模拟器自动添加微信好友,支持逍遥模拟器、雷电模拟器、夜神模拟器、猩猩模拟器,可通过手机号、QQ、微信号进行添加,支持自定义备注、自定义添加标签、自定义选择添加性别...微信附近人直接自动打招呼、添加好友!
  • 苹果微商助手 微商好助手 微商神器 ios
  • 微信自动加好友 模拟位置

    千次阅读 2014-12-28 14:39:00
    周围朋友有做代购的想要自定义位置,并且能够搜索附近的人自动打招呼的功能。...2 微信搜索附近的人,自动打招呼 3 可以自定义消息内容 需要的知识点: 1百度地图SDK 获取位置 设置当前位置 2robotium自动化测试库
  • 但是如果一个女孩主动加了你的微信后,却一直不跟你说话或者只是招呼是为什么呢? 一,微商 如果一个女孩加你的微信很久了却不说话很可能是因为她是个微商,她的朋友圈会给自己带来利益,加你的微信不过是...
  • 微信自动加好友 模拟位置(二)

    千次阅读 2015-01-04 21:52:26
    上片没有上传demo 现在补上来 模拟位置 微信自动打招呼
  • 微信

    2016-09-13 15:33:39
     手动操作多个微信同时聊天,忙得不知道先聊哪一个,新加的好友根本没有时间主动打招呼,以至于还没有推送自己的信息,就被对方删除了。  3、工作效率低  手动操做多个微信发朋友圈,相同的内容却
  • │ │ │ ├微信虚拟定位摇一摇自动打招呼教程.exe │ │ │ ├<摇一摇程序> │ │ │ │ ├cfgdll.dll │ │ │ │ ├摇一摇.exe │ │ │ │ └摇一摇.ini │ │ ├<微信营销实战培训班> │ │ │ ├微信营销实战...
  • 软件主要提供GPS位置模拟、微信附近打招呼、批量发好友消息、批量加好友、朋友圈点赞等多项功能。用户使用软件可以实现位置模拟给”不同地域“的附近的人打招呼,发送任何想要传达的信息、自动给通讯录的每个好友...
  • 群英微信加好友软件是基于逍遥安卓模拟器(微信不会封号)基础上自主研发的微信营销软件可以指定全国任意位置精准的定位,对附近的人打招呼、摇一摇、通讯录自动群发信息、批量加好友等是一款效果卓越的微信营销软件。...
  • 这是一个微信公众号的暴利项目,是一个附近聊天交友的源码,也是一个充值的项目。这个项目针对S狼来说有极高的...当有人订阅服务号后,服务号会自动发送附近聊天交友信息或附近的打招呼通知订阅者,订阅者点击查看进入
  • 自主研发微信,QQ附近的人全自动打招呼手机,全国任意定位,微信,QQ通用,日发万条, 各行业广告最强营销。附带其他强大功能,软件和手机完美结合,简单操作,可抵100个业务员。 有需要加QQ:76719654
  • 自动打招呼自动发图文功能因为有两个.bat需要运行,所以测试版没有。4、如果你不需要自动打招呼或者自动发图文,那这个版本就绝对够用了。5、用户名admin密码admin888 数据库连接在data文件夹下config.php.
  • 微信拍一拍,竟然一行代码搞定

    千次阅读 多人点赞 2020-06-25 21:25:03
    张小龙更是在朋友圈发文:“微信史上仅需一行代码的有趣功能终于来了,拍一拍,像蚂蚁一样打招呼。” 虽有人吐槽它无用鸡肋,但还是玩得不亦乐乎,大家的社交欲望仿佛被重新点燃了。
  • 电脑版微信

    2013-04-22 08:39:08
    3.4增强版电脑版微信,有自动摇一摇,自动打招呼,跟淘宝的一模一样,安装需要多看看介绍!WIN7 XP 保证可用!
  • 微信公众平台注册开通助手可帮助企业、个人等快速开通微信公众平台,生成二维码、开通自动回复、群发、关键词回复等功能。...5.加关注后自动打招呼     相关阅读: 微信聊天图片保存在哪里?怎么删除
  • 公开课的朋友们,大家好。又到了一年一度的微信公开课。很抱歉这次没有来到现场,在这里跟大家招呼。其实我是故意不来现场的。记得第一次公开课,我提到说,参加各种会议可能是很浪费时间的。我还...

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

微信自动打招呼