用游戏考拉会封号吗叫算了拉人进群都拉不进去

院领导集体
中国科学院大学
上海科技大学
《中国科学院院刊》(中文版)是中国科学院主办的以战略与决策研究为主的科技综...
《科学通报》是自然科学综合性学术刊物,力求及时报道自然科学各领域具有创新性...
覆盖数学、物理、化学、生命科学、地球科学、信息科学、技术科学与天文学等学科...
广州“毒保姆”曾与有家室男子生子 一生不顺
复兴无望!米兰双雄变双熊 只有土豪能拯救他们
洪明甫:战辽足力争全取三分 关系到谁掉进降级区”
男子公交车上遭年轻女乘客非礼 不堪其扰大吼
视频-麦克金尼寄语安联训练营 邀你共聚圣安德鲁斯:阿根廷前女总统被控欺诈 资产被冻结
我要分享 &
文章来源:pc蛋蛋拉人进群团队&&&&发布时间: 02:42:16&&【字号:&&&&&&】
老百姓上了网,民意也就上了网☆//zHlii☆
上网了解民意,应成为干部的“基本功”【解读】习近平说:“我国网信领域广大企业家、专家学者、科技人员要树立这个雄心壮志,要争这口气,努力尽快在核心技术上取得新的重大突破。”互联网核心技术的重要性不言而喻。习近平引用这句古语,是鼓励网信领域相关从业者,坚持不懈去探索,脚踏实地去工作,就能够在互联网核心技术上尽快取得突破。
状况不断!谢震业称没听到枪响 莫有雪拉伤大腿:张柏芝为儿子包场庆生 小Q超萌Lucas长高(组图)
二、湖南农用地流转中的制度问题    虽然湖南省农用地流转取得了一定成效,但流转效果并未达到预期,除受传统观念和环境的影响外,流转制度的问题是制约湖南农用地流转的主要问题,主要体现在以下几个方面。    (一)农用地流转制度基础薄弱    湖南农用地流转的实践仍处于起步阶段,在相关法律政策的制度保障上仍存在许多问题,主要表现在三个方面。    1、土地权属不明确,导致相关利益人之间矛盾冲突频发。根据我国目前的法律,农民集体的含义并没有明确,同时“三级所有,队为基础”的农村集体所有制土地在面积、四至和地籍管理方面混乱,导致一系列矛盾冲突频发。尽管大规模的土地确权工作已经展开,然而面对复杂的局面,各种主体之间的利益冲突,使得土地的确权工作所取得的成果收效甚微。    2、市场建设进程缓慢,农用地价值被扭曲。完善的土地市场及价格机制是农用地合理流转的必要条件,然后才能以市场为导向实现资源优化配置。目前湖南省内大部分地区尚未形成统一规范的农用地流转市场,流转中介组织较少,流转信息传播渠道不畅,农用地流转的对象和范围选择余地小,往往出现农户有转让意向却找不到合适的受让方,而需求者又找不到出让者的现象。流转市场中供需信息无法有效传递,流转价格无法准确反映土地供需状况,无法刺激和引导土地经营权合乎需求地流动和使用,在一定程度上影响了农用地流转的程度、规模和效益,限制了流转区域范围。    3、农村社会保障和农业保险制度滞后。长期以来,“以农养工”的政策使得资源一边倒的向城市倾斜,导致农村社会保障制度不健全,这使得保险的功能相对于其资本功能被大大强化,土地仍然是农户基础的生活资料来源。    (二)农用地流转操作机制不规范    农用地流转在湖南农村虽早己存在,但大多数地区尚未建立起一套完整规范的流转程序。笔者以湖南益阳市为例,剖析农用地流转在操作上的主要问题。    1、定价缺乏科学依据。目前,该市山丘区耕地的流转价格大多为200—300元/亩,荒山荒地更低,有的地方甚至只有30元/亩;湖区耕地流转大多为500元/亩,最高的达900元/亩。如此价格悬殊,低价没有保障农民利益,高价格也给承包者带来压力,不利于长效流转。    2、约定期限短。2013年,该市农用地流转中,期限在1年以下的占到25.3%,1-5年的占到43.4%。由于约定期限短,承租者缺乏长期经营的思想,投入大打折扣,部分承租者在经营过程中搞短期行为,进行掠夺性生产,从而导致地力下降。    3、合同不规范,口头协议多。2013年,该市农用地流转口头协议占比达51%,“空口无凭”往往是产生流转纠纷的主要原因,受理的农用地流转纠纷案件达864件,比上年增加120件,影响社会稳定。    (三)农用地流转监管机制不健全    18亿亩耕地红线是我国粮食安全战略的重要内容,农用地流转中的利益分配、矛盾化解等都需要政府加强监管。但由于湖南省农用地流转处于摸索期,进而造成了流转监管机制在一些方面的失位,影响了农用地流转效果。    1、流转收益的提高,使得流转之后出让方与受让方之间要求再次分配利益的矛盾。随着农民税费的取消,农业补贴力度加大,农产品价格在波动中上升,使得农业生产可以取得较好的收益。流转农民预期的提高,承包人与经营者之间的谈判费用的增加,使得流转合同的期限缩短,从而使得经营者加强农业基础设施建设的愿望减少。原本承包制改革以来本就逐渐荒废的农业设施进一步退化。    2、部分地区流转存在非粮化现象。农用地流转后的用途是自然因素、社会因素与市场因素共同作用的结果,本身是流转所期望的目标,而且可以优化农业生产结构和区域布局。但受让方为追求高附加值,放弃粮食生产转而种植经济作物的倾向十分明显,结果使得流转之后非粮化。就造成了粮食主产区流转以获取高附加值与保证粮食生产任务之间的矛盾,加重了主产粮区农民的责任,降低了农民流转土地的积极性,更使得农村劳动力的流失加剧,形成恶性循环。    3、监管调处机制不健全。从目前的实际情况来看,农用地流转导致许多纠纷的产生。从法律角度讲,处理纠纷不外乎调解、仲裁、诉讼。而对农村来说,首先没有专门的调解机构,调解只能依靠村干部、血缘关系等进行,而基于主观因素、专业素养来说,很难说这些人能做出符合国家规定的调解结果,而仲裁也面临着同样的问题。对于诉讼,则因为现行法律对相关内容并没有明确详细的规定,法院就纠纷的管辖、法律的适用都存在问题,因而并不能很好的处理纠纷,化解矛盾。而法院不能做出合法的判决,又响到问题的解决,造成纠纷的迁延恶化,形成更大的问题。    三、完善农用地流转制度的建议    土地产权制度的关键在于流转,而流转的本质是土地的资本化。而要完成土地的资本化,现有的土地方面的法规显然是不完善的;但是,作为一个高度发达的市场经济体,我国社会主义市场经济法规是十分完备的。只要妥善划分产权主体,就可以将现有的经济法规适用于土地产权领域,从而建立起完善的土地产权制度体系,并同时保持法律体系的系统与完整从而实现平稳的改革与发展。    (一)确权颁证是基础    产权是现代经济的核心,作为一种社会工具,其重要性在于事实上它能帮助一个人形成与其他人进行交易时的合理预期。在实地走访中,发现农民存在着“六怕六担心”思想。一怕私下流转无协议,担心口头约定引纠纷。二怕流转公司无实力,担心流转费用无保障。三怕流转农用地改用途,担心粮食补贴不发放。四怕农用地流转后没事干,担心生活来源无保障。五怕流转土地被抵押,担心流转农用地遭没收。六怕流转年限长,担心流转到期难收回。诸如此类的问题都令从事农用地流转的农民不安。因此,农用地流转问题必须把握的一个基本要点是产权权利,土地制度的一大核心体系就是要界定和保护合法的产权,权属清晰才能建立秩序良好的流转市场。    (二)搭建平台是关键    农用地流转是一个涉及很多参与主体的行为,农用地流转的实现,需要搜集、筛选信息,如果农用地流转只是在村级范围内,这些问题是比较容易解决的,但是如果交易主体分布在不同区域,那么要实现农用地流转需要经过很长时间的搜集信息,使农地流转的交易成本上升,因此政府应该建立农用地流转的交易中心,及时公布农用地流转的需求和供给信息,可以乡镇为单位建立土地流转中心,其职能主要是进行土地流转规划,收集、提供土地供需信息,确立土地流转指导价格,办理交割、登记等相关手续。    (三)价格评估是核心    建立统一的价格法律体系,将农地价格纳入《价格法》。建立地价信息定期公布制度,运用科学的方法确定与国有土地市场价格相协调的农地市场基准地价,由有关单位定期公布;建立农用土地价格评估体系,由具有评估资格的地价评估单位和部门评定低价,提高机体土地入市的透明度和可操作性;建立相应的法律规范,以加强对土地评估过程及结果的监督管理。    (四)保障制度是支撑    长期的生产生活所形成的离乡不离土的农民意识,制约了农业生产的规模化经营。因此完善保障制度推进农用地流转和规模化经营是当下急需解决的问题。主要从三个方面着手。    1、机制保障方面。一是强化土地流转备案审查机制。主要是要加强对土地流转合法性的审查,把好政策关口。明确审查和调查核实的方法、原则,保证流转程序和内容真实、完整、合法有效。对申请合同鉴证的,依法鉴证。对承包经营业主的资信情况、履约能力、生产经营能力和项目的效益风险强化监管,对经营项目实施严格的备案审查。禁止不具备农业生产经营能力、不符合法律政策要求的组织或个人获得流转土地。二是设立农村土地纠纷调解组织。加强仲裁基础设施建设,切实改善调解仲裁工作条件和手段。加大仲裁培训力度,提高仲裁员队伍素质。加强农村土地承包经营纠纷调解仲裁考核评价工作,提高调解仲裁能力,及时有效化解农村土地承包经营纠纷。    2、社会保障方面。各地的实践证明:社会保障和社会化服务体系是促使农民离开土地的基础条件。改革开放以来,我国经济体制的改革和社会结构的转型不断深化,农民土地的社会保障功能随之日益凸显,逐渐由单一的生存保障变为生存和发展保障。因此,有了完善的社会保障制度,农民离乡离土也不怕,从而真正把农民从土地的束缚上解脱出来。通过加强农民就业培训、看病就医报销、养老保障等工作,让农民能放心地离开土地。同时要完善农村社会化服务体系,强化农村合作经济组织的服务功能,为农村土地流转创造良好的外部环境。    3、资金保障方面。一是财政扶持。政府财政每年从有关土地收入分配用于支农的资金中安排一定额度,设置土地流转专项资金,对符合土地承包政策法规、流转合同手续完备,流转面积大、流转期限较长,吸纳流转土地农民就业贡献较大、集中连片规模经营的规模经营主体每亩给予一定数额的一次性补助,用于对流转出土地农户的补偿。二是金融支持。各地融资担保平台应把参与规模经营的龙头企业、种植大户、农民专业合作社、农业企业纳入服务范围。依法开展权属清晰、风险可控的农用生产设备、四荒地使用权等抵押贷款。鼓励开展以土地流转规模经营主体为服务对象的涉农保险业务。三是税收优惠。对土地流转免征流转税、所得税,提高流转收益,促进土地流转。鼓励各地通过以奖代补等形式,在农民自愿前提下组织开展互换并地,解决承包地细碎化问题。“网民来自老百姓,老百姓上了网,民意也就上了网。”因此,习近平要求各级领导干部“经常上网看看,潜潜水、聊聊天、发发声,了解群众所思所愿,收集好想法好建议,积极回应网民关切、解疑释惑”,强调指出这“是新形势下领导干部做好工作的基本功”。
【用典】日日行,不怕千万里;常常做,不怕千万事。了解民意应有一整套科学严谨的现代方法和手段。领导干部应该从掌握科学严整的方法开始,不要看一时一地一个人的表达,要用集合式的观点去看。还应运用统计学的大数定律进行对冲和平衡。在某个问题上,总体有什么样的意见表达,要看人们倾向的重点是什么,人们从哪个角度在表达意见主张。只有这样,看到的民意才会比较清晰完整。这才是理性的看问题方式。
方励回应质疑:为《百鸟朝凤》没任何尊严:美国大奖赛罗切特400混夺冠 赛后发推犀利调侃
【释义】出自清代山阴金先生《格言联璧·处事》。天天行走,千里的路程会走完;事情经常做,就算再多也能做完。
习近平强调,啃硬骨头多、打攻坚战多、动奶酪多,是新一轮改革的特点。全面深化改革,首先要刀刃向内、敢于自我革命,重点要破字当头、迎难而上,根本要激发动力、让人民群众不断有获得感。各级党委和政府以及各级领导干部要把自己摆进去想改革、议改革、抓改革,争当击楫中流的改革先锋。列改革题目,定改革举措,要紧密对接群众需求,悉心听取群众意见,让人民群众在改革中建功立业、在改革中多得实惠。
习近平所说的“包容”,其实还有更深刻的含义。网络舆论场是一个复杂的生态系统,内在有很多的关联性。有时不能就事论事,不能割裂处理。
管理者自身的能力、素养和行为方式的改进,是整个社会文明提升、风气提升的重中之重、关键所在。要求网民做到的,首先自己要做到,还要更高一格。要求网民不信谣、传谣,就需要保证主渠道的畅通,信息能够及时准确地分享给老百姓。
习近平指出,在适度扩大总需求的同时,着力加强供给侧结构性改革,是对我国经济发展思路和工作着力点的重大部署。各地要结合自身实际,认真贯彻新的发展理念,围绕去产能、去库存、去杠杆、降成本、补短板,优化现有生产要素配置和组合、增强经济内生增长动力,优化现有供给结构、提高产品和服务质量,培育发展新产业新业态、提供新产品新服务。归结到一点,就是要进一步解放和发展社会生产力,用新供给引领需求发展,为经济持续增长培育新动力、打造新引擎。良好生态环境是供给侧结构性改革的题中应有之义,也是评价供给侧结构性改革成效的重要标准。
车主接病人违停留便条 交警等8分钟未处罚:金延璟26分韩国1-3落败 意女排夺落选赛开门红
(责任编辑:海峡财经)微信 为什么拉人进群 不用被拉人的同意? - 知乎39被浏览<strong class="NumberBoard-itemValue" title="3,583分享邀请回答91 条评论分享收藏感谢收起81 条评论分享收藏感谢收起Android实战(11)
妙用AccessibilityService黑科技实现微信自动加好友拉人进群聊
标签: 2018
在上上周的周六和周日,我发了两篇利用itchat实现微信机器人的文章(Python):
通过把脚本挂到服务器上,自此告别手动挡,不用去手动转发小宇宙,
不用手动加好友,然后把别人一个个拉到我的Py交易群里。正当我
暗自窃喜的时候,微信并没有放过我这只小猫咪。
我还记得那天早上,我兴高采烈早早来到公司,更新了一波代码准备为
我的机器人添砖加瓦的时候,当我关闭了阿里云上的脚本,这时候意外来了,
我的机器人小号,再也无法通过微信网页端的接口登录了!!!
扫描完二维码,永远提示的都是下面这样一句话:
&&1203&&当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。
你可以通过Windows微信、Mac微信或者手机客户端微信登录。&&
是的,就是这样一句话,找不到申诉渠道,也不知道何时才可能会解封。(客户端任可正常使用)
而现在另外新申请的微信小号是无法登录微信网页端的,其实这是微信在慢慢关停网页版登录,
最主要的原因就是机器人泛滥!
没有了网页版微信,日子还是要过的,难道只能回归手动档么?几种解决方案:
1.研究客户端协议(这个成本巨高,而且官方稍微改点东西,够你哭的)
2.APP逆向,利用Xposed框架,hook相关的方法,也是有些研究成本的;
3.利用类似与按键精灵的东西,编写脚本让他自动点点点,自动化测试
工具或者本节讲的这个无障碍服务——AccessibilityService
AccessibilityService其实不是一个新的东西了,老久之前就有了,
官方原意:优化残障人士的使用体验的,而在我大天朝:
抢红包,自动安装,一键XXX等等,可谓欣欣向荣。
使用AccessibilityService也非常Easy,核心要点就是:
通过UI Automator找到节点,通过resource-id,text,content-desc等
唯一特征定位到具体的节点,接着执行各种模拟操作,点,滚动,填充,
用法比较简单的,大部分时间会花在试错和逻辑调整上!
来一发通过AccessibilityService实现的自动加好友以及拉人进群聊的Gif体验下:
Gif加速了一点,不过完成加好友以及拉人总共也就耗时15s,是相当客观的啦。
下面就来介绍下AccessibilityService这个玩意怎么用吧~
AccessibilityService用法简介
1.自定义Service继承AccessibilityService
如题,自定义一个AccessibilityService类,重写两个主要方法:
onInterrupt( ):辅助功能中断的回调,基本不用理,核心还是
onAccessibilityEvent(AccessibilityEvent event) 上。
当界面发生了什么事情,比如顶部Notification,界面更新,内容变化等,
会触发这个方法,你可以根据不同的事件响应不同的操作,比如小猪这个
就是当顶部出现加好友的Notification的event时,跳转到加好友页。
点开AccessibilityEvent类可以看到一堆的事件类型~
TYPE_VIEW_CLICKED
View被点击
TYPE_VIEW_LONG_CLICKED
View被长按
TYPE_VIEW_SELECTED
View被选中
TYPE_VIEW_FOCUSED
View获得焦点
TYPE_VIEW_TEXT_CHANGED
View文本变化
TYPE_WINDOW_STATE_CHANGED
打开了一个PopupWindow,Menu或Dialog
TYPE_NOTIFICATION_STATE_CHANGED
Notification变化
TYPE_VIEW_HOVER_ENTER
一个View进入悬停
TYPE_VIEW_HOVER_EXIT
一个View退出悬停
TYPE_TOUCH_EXPLORATION_GESTURE_START
触摸浏览事件开始
TYPE_TOUCH_EXPLORATION_GESTURE_END
触摸浏览事件完成
TYPE_WINDOW_CONTENT_CHANGED
窗口的内容发生变化,或子树根布局发生变化
TYPE_VIEW_SCROLLED
TYPE_VIEW_TEXT_SELECTION_CHANGED
Edittext文字选中发生改变事件
TYPE_ANNOUNCEMENT
应用产生一个通知事件
TYPE_VIEW_ACCESSIBILITY_FOCUSED
获得无障碍焦点事件
TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED
无障碍焦点事件清除
TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
在给定的移动粒度下遍历视图文本的事件
TYPE_GESTURE_DETECTION_START
开始手势监测
TYPE_GESTURE_DETECTION_END
结束手势监测
TYPE_TOUCH_INTERACTION_START
触摸屏幕事件开始
TYPE_TOUCH_INTERACTION_END
触摸屏幕事件结束
TYPE_WINDOWS_CHANGED
屏幕上的窗口变化事件,需要API 21+
TYPE_VIEW_CONTEXT_CLICKED
View中的上下文点击事件
TYPE_ASSIST_READING_CONTEXT
辅助用户读取当前屏幕事件
好吧,上面的表其实并没什么大用,我还是习惯直接把event.toString()给打印出来,
然后自行去判断~
如图就可以拿到event类型,以及产生对应事件的类名,核心是这两个,
除此之外还有Text和ContentDescription等。
比如我那个监听Notification跳转到添加好友页的:
这里就是对事件类型做了下判断,然后获取contentIntent,跳转而已。
简单点讲就是:
你在这个方法里,去判断一波事件类型和className,
然后再获取控件,做一些点击,滚动,填充文本等。
2.服务的配置
自定义完这个服务要想让他启用你还得执行下面的操作:
Step 1:在res文件夹下创建xml文件夹,新建一个配置的xml文件(名字自己定)
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:notificationTimeout="100"
android:packageNames="com.tencent.mm"
android:settingsActivity="com.coderpig.wechathelper.MainActivity" /&
属性简介如下:
accessibilityEventTypes:设置监听的事件种类,用|隔开,监听所有可以用typeAllMask;
accessibilityFeedbackType:服务提供的反馈类型,feedbackGeneric通用反馈;
accessibilityFlags:辅助功能附加的标志,flagDefault默认的配置
canRetrieveWindowContent:辅助功能服务是否能够取回活动窗口内容的属性
notificationTimeout:响应时间
packageNames:监听的应用包名,不填,默认监听所有应用的事件
settingsActivity:允许用户修改辅助功能的activity类名
Step 2:接着AndroidManifest.xml文件中对该Service进行配置
先是添加一个权限:
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
接着是Service的配置:
这里是你那个配置文件xml文件的文件名,其他照抄。
Step 3:安装到手机后,需要在手机设置的无障碍处开启服务
一般在设置的辅助功能处能找到:
如果Logcat那里能看到打印的LOG,说明服务正常运行,接下来要找控件节点
这里可以用到神器UI Automator来查看布局层次,打开Android Studio,
Ctrl + alt + A,输入 monitor
依次点击:选中设备 -& Dump View Hierarchy for UI Automator
稍等一会,右侧就会出现当前页面的布局层次图,如图随手选中一个邀请的节点:
右侧可以拿到对应的信息,一般比较常用的是这几个,有一点要注意!!!
resource-id不一定是唯一的
获得控件基本都会通过下述这个方法:
getRootInActiveWindow( ):获取当前整个活动窗口的根节点
返回的是一个AccessibilityNodeInfo类,代表View的状态信息,
提供了下述几个非常实用的方法:
getParent:获取父节点。
getChild:获取子节点。
performAction:在节点上执行一个动作。
findAccessibilityNodeInfosByText:通过字符串查找节点元素。
findAccessibilityNodeInfosByViewId:通过视图id查找节点元素。
后面的这两个方法会返回一个AccessibilityNodeInfo列表,一般操作是
遍历,然后筛选特定节点,比如我程序里的,获得底部Tab节点为”通讯录”,
然后点击,跳转后遍历,筛选”群聊”的节点,点击。
另外,UI Automator有时并不可靠(实时问题),我建议写多一个遍历节点
的方法,可以更清楚里面的控件情况:
拿到控件,接着就到触发事件了。
4.触发事件
通过调用performAction()传入一个时间类型即可触发相应时间,比如点击,长按等
事件就多了,自己点开AccessibilityNodeInfo类查看吧,这里介绍下最常用的几个事件:
performAction(AccessibilityNodeInfo.ACTION_CLICK)
performAction(AccessibilityNodeInfo.ACTION_LONG_CLICK)
performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD)
performAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD)
//填充EditText(API版本需要&18可用方法1,API&21两种方法都可以使用)
ClipboardManager clipboard = (ClipboardManager)this.getSystemService(Context.CLIPBOARD_SERVICE)
ClipData clip = ClipData.newPlainText("text", "填充内容")
clipboard.setPrimaryClip(clip)
//获得焦点
info.performAction(AccessibilityNodeInfo.ACTION_FOCUS)
////粘贴进入内容
info.performAction(AccessibilityNodeInfo.ACTION_PASTE)
Bundle arguments = new Bundle()
arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "填充内容")
info.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments)
除了控件触发事件外,AccessibilityService提供了一个performGlobalAction(),用于执行
一些通用的事件:
GLOBAL_ACTION_BACK
点击返回按钮
GLOBAL_ACTION_HOME
GLOBAL_ACTION_NOTIFICATIONS
GLOBAL_ACTION_RECENTS
打开最近应用
GLOBAL_ACTION_QUICK_SETTINGS
打开快速设置
GLOBAL_ACTION_POWER_DIALOG
打开长按电源键的弹框
另外在实际开发中,直接调用这些全局方法又是并没有生效,
我在调GLOBAL_ACTION_BACK的时候就发现有时不会回退,
个人的解决方案是使用handler.postDelay()延时执行:
除了这样玩以外,我还利用时间差,串行去执行几个任务,比如:
上面的步骤是:
进入群聊聊天信息页后,列表滚动两次,接着依次:
1.延时1s后,找到添加成员按钮并点击;
2.延时2.3s后,把名字填充到EditText里
3.延时3s后,点击确定按钮
就不用过于依赖onAccessibilityEvent方法,除了用handler.postDelay外,
还可以用Thread.sleep(休眠时长),用到的点大概就这么多,其余的自行探究吧。
本节讲解一波如何通过AccessibilityService来实现自动加好友以及拉人进群,
之前是打算用xposed来写的,后面发现没我想像中简单,而且很多用安卓机的都
不会搞机(基),root也不会,后来还是选择了AccessibilityService,简单易用,
当然后面还是会研究一波xposed实现的,敬请期待~
对了,还有,之前那个网页端的机器人被封原因估计是信息秒回,如果有还用
itchat那个做机器人的,建议回复的时间可以稍微延长些;
关于AccessibilityService更多内容可见:
Android辅助功能:
Building Accessibility Services:
Developing an Accessibility Service:
附:关键代码(都可以在: 找到):
代码有Bug的话正常,后续会优化下逻辑,感觉写得有点杂~
package com.coderpig.
import android.accessibilityservice.AccessibilityS
import android.app.N
import android.app.PendingI
import android.os.B
import android.os.H
import android.util.L
import android.view.accessibility.AccessibilityE
import android.view.accessibility.AccessibilityNodeI
import java.util.L
* 描述:微信监控服务类
* CoderPig on
public class HelperService extends AccessibilityService {
private static final String TAG = "HelperService";
private Handler handler = new Handler();
private String userName = "123";
public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
CharSequence classNameChr = event.getClassName();
String className = classNameChr.toString();
Log.d(TAG, event.toString());
switch (eventType) {
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
if (event.getParcelableData() != null && event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
String content = notification.tickerText.toString();
if (content.contains("请求添加你为朋友")) {
PendingIntent pendingIntent = notification.contentI
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
switch (className) {
case "com.tencent.mm.plugin.subapp.ui.friend.FMessageConversationUI":
addFriend();
case "com.tencent.mm.plugin.profile.ui.SayHiWithSnsPermissionUI":
verifyFriend();
case "com.tencent.mm.plugin.profile.ui.ContactInfoUI":
performBackClick();
case "com.tencent.mm.ui.LauncherUI":
if (!userName.equals("123")) {
openGroup();
case "com.tencent.mm.ui.contact.ChatroomContactUI":
if (!userName.equals("123")) {
inviteGroup();
case "com.tencent.mm.ui.chatting.ChattingUI":
if (!userName.equals("123")) {
openGroupSetting();
case "com.tencent.mm.plugin.chatroom.ui.ChatroomInfoUI":
if (userName.equals("123")) {
performBackClick();
addToGroup();
case "com.tencent.mm.ui.base.i":
dialogClick();
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
private void addFriend() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List&AccessibilityNodeInfo& list = nodeInfo
.findAccessibilityNodeInfosByText("接受");
if (list != null && list.size() & 0) {
for (AccessibilityNodeInfo n : list) {
n.performAction(AccessibilityNodeInfo.ACTION_CLICK);
performBackClick();
private void verifyFriend() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
userName = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/d0n").get(0).getText().toString();
AccessibilityNodeInfo finishNode = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/hd").get(0);
finishNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
private void openGroup() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List&AccessibilityNodeInfo& nodes = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/ca5");
for (AccessibilityNodeInfo info : nodes) {
if (info.getText().toString().equals("通讯录")) {
info.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
handler.postDelayed(new Runnable() {
public void run() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List&AccessibilityNodeInfo& nodes = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/j5");
for (AccessibilityNodeInfo info : nodes) {
if (info.getText().toString().equals("群聊")) {
info.getParent().getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
private void inviteGroup() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List&AccessibilityNodeInfo& nodes = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/a9v");
for (AccessibilityNodeInfo info : nodes) {
if (info.getText().toString().equals("小猪的Python学习交流群")) {
info.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
private void openGroupSetting() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/he").get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);
private void addToGroup() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List&AccessibilityNodeInfo& listNodes = nodeInfo.findAccessibilityNodeInfosByViewId("android:id/list");
if(listNodes != null && listNodes.size() & 0) {
AccessibilityNodeInfo listNode = listNodes.get(0);
listNode.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
listNode.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
final AccessibilityNodeInfo scrollNodeInfo = getRootInActiveWindow();
if (scrollNodeInfo != null) {
handler.postDelayed(new Runnable() {
public void run() {
List&AccessibilityNodeInfo& nodes = scrollNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/d0b");
for (AccessibilityNodeInfo info : nodes) {
if (info.getContentDescription().toString().equals("添加成员")) {
info.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
handler.postDelayed(new Runnable() {
public void run() {
List&AccessibilityNodeInfo& editNodes = getRootInActiveWindow().findAccessibilityNodeInfosByViewId("com.tencent.mm:id/arz");
if(editNodes != null && editNodes.size() & 0) {
AccessibilityNodeInfo editNode = editNodes.get(0);
Bundle arguments = new Bundle();
arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, userName);
editNode.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
}, 2300L);
handler.postDelayed(new Runnable() {
public void run() {
List&AccessibilityNodeInfo& cbNodes = getRootInActiveWindow().findAccessibilityNodeInfosByViewId("com.tencent.mm:id/kr");
if(cbNodes != null) {
AccessibilityNodeInfo cbNode = null;
if(cbNodes.size() == 1) {
cbNode = cbNodes.get(0);
} else if(cbNodes.size() == 2) {
cbNode = cbNodes.get(1);
if (cbNode != null) {
cbNode.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
AccessibilityNodeInfo sureNode = getRootInActiveWindow().findAccessibilityNodeInfosByViewId("com.tencent.mm:id/hd").get(0);
sureNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}, 3000L);
private void dialogClick() {
AccessibilityNodeInfo inviteNode = getRootInActiveWindow().findAccessibilityNodeInfosByViewId("com.tencent.mm:id/aln").get(0);
inviteNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
userName = "123";
handler.postDelayed(new Runnable() {
public void run() {
List&AccessibilityNodeInfo& sureNodes = getRootInActiveWindow().findAccessibilityNodeInfosByViewId("com.tencent.mm:id/aln");
if(sureNodes != null && sureNodes.size() & 0) {
AccessibilityNodeInfo sureNode = sureNodes.get(0);
sureNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
private void performBackClick() {
handler.postDelayed(new Runnable() {
public void run() {
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
public void recycle(AccessibilityNodeInfo info) {
if (info.getChildCount() == 0) {
Log.i(TAG, "child widget----------------------------" + info.getClassName().toString());
Log.i(TAG, "showDialog:" + info.canOpenPopup());
Log.i(TAG, "Text:" + info.getText());
Log.i(TAG, "windowId:" + info.getWindowId());
Log.i(TAG, "desc:" + info.getContentDescription());
for (int i = 0; i & info.getChildCount(); i++) {
if (info.getChild(i) != null) {
recycle(info.getChild(i));
public void onInterrupt() {
来啊,Py交易啊
想加群一起学习Py的可以加下,智障机器人小Pig,验证信息里包含:
Python,python,py,Py,加群,交易,屁眼 中的一个关键词即可通过;
验证通过后回复 加群 即可获得加群链接(不要把机器人玩坏了!!!)~~~
欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py。
一个普通的Android开发者
本人捞比,不单独回答问题!
加群请遵守群规,不定期看群解答问题~
小猪的Android入门交流群:
小猪的Android进阶交流群:
附:Android基础入门教程系列相关下载:
如果本博客对你的有所帮助,
不妨小额打赏下小猪,你的
鼓励是我不断写博客的动力,

我要回帖

更多关于 货拉拉封号 的文章

 

随机推荐