多功能控件安卓红包控件版红包

今日论坛第 1 个签到,每日签到可得财富值+2,连续5天签到后再连续签到则每日可得财富值
+4,记得每天都来签到哦~
上一主题:
下一主题:
查看: 340 | 回复: 4
【LCG大神★XX】:红包控件(Android)v1.0已XX版 全平台支持秒抢红包【3月8日】
财富值 601530
好评度 472
交易信用 0
人气值 11921
积分/帖子:47481
连续签到天数:58
全部签到天数:972
注册时间:
手机型号:
中兴红牛v5
状态:在线
【LCG大神★XX】:红包控件(Android)v1.0已XX版 全平台支持秒抢红包【3月8日】
软件名称:红包控件
软件版本:v1.0已XX版
软件语言:中文
软件大小:1.6M
软件包名:
支持系统:Android 2.2+
测试机型:华-为荣耀 3X
【软件介绍】
软件说明:
1、安卓6.0反正无效果,其他请自测。
2、使用办法:点击用户登录,随便输入用户名+密码,然后点击链接,再返回,点击启动,不需要序列号,直接确定,就可以了。。
&&下载次数: 18
有志者事竟成破釜沉舟百二秦关终属楚
苦心人天不负卧薪尝胆三千越甲可吞吴
人生九大须知
1、所谓铁饭碗,不是在一个地方吃一辈子饭,而是一辈子到哪里都有饭吃。
2、把每一件简单的事做好,就不简单;把每一件平凡的事做好,就是不平凡。
3、生活的最高境界是宽容,相处的最高境界是尊重。
4、从崇高到荒唐只有一步,从荒唐到崇高却没有路。
5、何谓生老病死?生的要好,老的要慢,病的要晚,死的要快。
6、傲不可长,欲不可纵,乐不可极,志不可移。
7、不与富交我不贫,不与贵交我不贱。
8、世上只有想不通的人,没有走不通的路。
9、能力就像一张支票,除非把它兑成现金,否则毫无价值。
交易信用 0
积分/帖子:4
连续签到天数:1
全部签到天数:2
注册时间:
手机型号:
状态: 离线
的空间哇的能力
哇咔记得了;卡没我
交易信用 0
积分/帖子:1
连续签到天数:1
全部签到天数:1
注册时间:
手机型号:
状态: 离线
看看是什么东西
交易信用 0
积分/帖子:5
连续签到天数:1
全部签到天数:1
注册时间:
手机型号:
状态: 离线
交易信用 0
积分/帖子:1
连续签到天数:0
全部签到天数:0
注册时间:
手机型号:
状态: 离线
微信扫一扫关注dospy点击图片查看原图
安卓版微信抢红包辅助软件助手
发布日期: 11:56
有效期至:长期有效
招商加盟区域:全国
浏览次数:11
微信快乐十分彩最后一位尾数可以控制的说明信息可能还不够细致和全面,如果您需要更详细了解微信快乐十分彩最后一位尾数可以控制的相关信息或索取相关资料,欢迎随时与我联系!
广州抢红包是真的吗的说明信息可能还不够细致和全面,如果您需要更详细了解广州抢红包是真的吗的相关信息或索取相关资料,欢迎随时与我联系!
微信群玩斗牛抢红包有没有控制尾数的说明信息可能还不够细致和全面,如果您需要更详细了解微信群玩斗牛抢红包有没有控制尾数的相关信息或索取相关资料,欢迎随时与我联系!
微信抢红包牛牛有没有办法控制尾数的挂的说明信息可能还不够细致和全面,如果您需要更详细了解微信抢红包牛牛有没有办法控制尾数的挂的相关信息或索取相关资料,欢迎随时与我联系!
&微信红包控制尾数辅助的说明信息可能还不够细致和全面,如果您需要更详细了解微信红包控制尾数辅助的相关信息或索取相关资料,欢迎随时与我联系!
微信玩红包抢尾数的有什么吗
█免费试效果█名称: 财富热线: 微信咨询:& QQ咨询:林经理
收费 非诚勿扰 收到短信第一时间添加您&因客户咨询流量较大,快捷了解请来电咨询
适合玩:(庄闲单双玩法.快乐十分玩法.尾数玩法,接龙玩法,牛牛玩法,大小单双玩法,色子玩法,押宝玩法.数字玩法.固定数字.固定金额,七星彩玩法.一元3包玩法.一毛两个包.2元五个包.3元5个包.微信红包控制尾数.支付宝红包控制尾数.QQ红包控制尾数.陌陌红包控制尾数.等等。)
微信玩红包抢尾数的有什么吗
█免费试效果█名称: 财富热线: 微信咨询:& QQ咨询:林经理
收费 非诚勿扰 收到短信第一时间添加您&因客户咨询流量较大,快捷了解请来电咨询
{控制红包牛牛快乐十分庄闲最佳尾数}
1.微信红包群隐身挂件
2.微信红包尾数挂件
3.控制红包金额大小单双
5.控制抢最好手气,抢最好
6.躲避最小包,一元三包控制器
7.控制金额尾数后1位,后2位,抢豹子(霸子)
8.抢红包王官方版功能:
9.躲避两个最小,躲避第二小。
10.中间抢牛牛
11.首尾相加,随机地雷玩法。
12.尾数玩法
13.数值等,大小综合玩法。
14.单包看穿
15.爬楼梯玩法
16.双A躲避最小最大
17.大小抢中间和尾包2合1
18.尾数抢中间和尾包2合1
功能综合:秒抢.延时秒数.看穿包.不抢最小包.双尾.不抢尾数最小包.随意抢包设置.金额单位安全值设置.中间抢.排名位置雷.各种位置数值设置等...
在玩够了品牌红包后,用户可能还得回到个人社交红包,回归亲朋好友间的互动。来自微信团队的数据显示,微信红包2月10日的单日收发量已超过去年峰值的10倍。阿里巴巴董事局主席马云也不能免俗,携一众高管给员工发支付宝红包。
微信首波红包全发现金 &
2月12日21时30分左右,,微信红包&摇一摇&功能陆续披上&红包&着装,用户只需拼命甩动手机,即可能摇出红包,次数不限。此外,在抢到红包后,还能将红包分享给好友,让好友继续抢。红包先到先得,大约20分钟后,红包全部抢完。
广州的陈先生说,基本上他的朋友都&摇&到了红包,且都是现金,不复杂。还有人笑言,微信的红包个头比支付宝大,摇一摇的方式也更简单,&就是摇得有些手酸&。
&&尽管没抢到,但我抢到了好友分享出来的红包。&的彭女士说。
此前支付宝&抢红包&活动被指&中奖率低&&购物红包没用处&等几宗罪。
记者从腾讯方面获悉,当晚&抢红包&活动只发了现金红包,没有卡券红包。此前腾讯称将发2500万个现金红包,但记者注意到,红包数量最终显示有3600万个。不过,腾讯未透露当晚红包总额。
&&今天只是毛毛雨,春晚有大惊喜。&
腾讯将联合商家在除夕的央视春晚给大家再次发现金红包,价值超过5亿元。据悉,支付宝也将在除夕夜的每个整点时分,给用户发红包。届时,酣畅淋漓的&抢红包&大战将进入高潮。
&&不发现金的都是耍流氓。&腾讯一位人士戏言。不过,毕竟微信此前还承诺过将发30亿元的卡券红包,该人士称,卡券红包发放时间&春节再说&。
&土豪&商家们的如意算盘
不像支付宝商家发购物红包能直接产生导流效应,微信联合的这些&土豪&商家们直接发现金打的是什么算盘?
微信玩红包抢尾数的有什么吗
█免费试效果█名称: 财富热线: 微信咨询:& QQ咨询:林经理
收费 非诚勿扰 收到短信第一时间添加您&因客户咨询流量较大,快捷了解请来电咨询
&微信红包作战指挥处&相关负责人告诉澎湃记者,&商家都是挤破头来寻求合作&,12日的合作商户有陆金所、泰康、京东、伊利、微店等。
有主说,他们的目的就是&品牌露出&,像伊利等品牌,向来都是爱投的金主。
此番&抢红包&活动中,记者注意到,&品牌露出&的机会很多
中新网海口4月11日电
记者11日从省公安厅获悉,近日,该省公安机关、国税部门联合破获涉案金额高达400多亿元的&5.18&利用黄金交易虚开专用发案,一举抓 获以钟某成、赵某溪为首的犯罪团伙共8名犯罪嫌疑人,捣毁开窝点3处,查扣作案电脑、打印机40余台、作案手机40余个,冻结涉案资金和车辆价值200 余万元。目前,该8名犯罪嫌疑人已被检察机关全部批准逮捕。
省公安厅副厅长韩精华表示,该案系公安部和国家税务总局自2015年4月联合部署在全国开展打击利用黄金交易虚开专用发票专项行动以来破获的涉案金额最高、涉及省市最多的虚开专用发票案件,也是海南省建省以来破获的涉案金额最大的虚开专用发票案。
据 了解,2015年5月,海南省公安厅经侦总队在工作中发现,海口恒功贸易有限等 51家涉嫌虚开专用发票案件线索,立即立案侦查,同时成立了
由省公安厅与省国税局精干力量组成的&5.18&专案组。副省长,公安厅长李富林,省国税局党组书记、局长于智广,公安厅副厅长韩精华等领导对案件侦破工
作多次做出指示。期间,公安部、国家税务总局、海关总署、人民银行等四部委联合督导组赴琼督导案件侦办工作。
专案组利用近7个月时间,先后转战、广州、汕头、深圳、等地,行程数万公里,调取了200余个涉案公司的资料、1000多个银行账户、分析梳理近5万条银行流水数据,全面开展案件侦办及调查取证工作。
查,该案犯罪嫌疑人通过代办公司注册工具公司,聘用财务代理人员代理记账并申领、对外虚开专用发票,利用黄金交易所进项发票抵扣税款,在没有真
实黄金交易的情况下,按照受票单位的需求虚开专用发票。据统计,自2013年6月至案发,涉案的51家公司共向全国28个省市2985家受票单位虚
开59185份销项专用发票,价税合计411.64亿元,税额69.98亿元。目前已抓获的犯罪团伙涉案金额86亿余元(价税合计),税额12亿余
元,其余团伙的犯罪嫌疑人已锁定身份,目前正在全力追捕中。
&5.18&利用黄金交易虚开专用发票案主要犯罪嫌疑人钟某成伙同赵某溪 利用黄金体积小、价值大、便于私下交易等特点,采取&票货分离&的方式,将从上海黄金交易所提取的黄金私下贱卖给生产回笼资金,同时将取得的上海黄金 交易所开具的进项专用发票抵扣上述开票工具公司的税款。
[VIP第1年] 指数:1
已缴纳 0.00 元保证金
联系人方经理(先生)&林经理&
会员 [当前离线]
电话手机地区广东-广州市
地址广州市越秀区广园西路13号省妇幼医院旁。安徽师范大学图书馆_问题解答_多功能控件安卓qq红包【加QQ 玖玖㈠四⑹玖㈧】_1
&&&&&&&&当前位置:&&&&多功能控件安卓qq红包【加QQ 玖玖㈠四⑹玖㈧】
发布时间:&&&&&&有位读者阅读此文
1、“我的图书馆”注册时无法获取校园卡的卡号?
答:“校园卡的卡号”是十位阿拉伯数字,可通过“我的图书馆”下的“证号查询”获取。如无法获取,也可通过在服务台刷卡获得。
2、在校外无法使用虚拟网获取图书馆的数据库资源?
答:图书馆数据库资源分两种:一种是本地镜像资源,可以通过虚拟网直接获取;另一种是远程资源,只能通过校园网获取,不能通过虚拟网直接获取。
3、ACS数据库IP地址被封的问题?
答:IP地址被封主要是恶意下载论文所致,例如用下载软件大量下载论文。如果IP地址被封,可设法改变电脑的IP地址。
4、一些数据库的资源只能获取摘要,不能获取文献全文的问题?
答:我校图书馆一些数据库资源确实没有买全文资源,只能查到摘要。
5、查询SCI、EI的收录以及核心期刊文章的查询问题?
答:SCI、EI的收录情况可通过DIALOG数据库查询,文章的收录和引用情况可通过“中国期刊网”数据库查询。
答:我校学生所持之一卡通,可用于图书馆借书。丢失所造成的后果,也由其持有者负责,故应妥善保管好,遗失后除到学校相关部门挂失外,还应尽快到图书馆服务台挂失。
答:http://lib.或者直接输入IP地址:210.45.204.8。主页不仅全面反映了图书馆提供资源和服务的情况,及时发布一些最新推出的服务举措和数据库开通、试用的信息,而且链接了许多通过网络可以获取的国内外有实用价值的信息资源。
答:电子图书、电子期刊或数据库供应商与图书馆订有协议,所订购的电子资源只允许校园网用户使用,供应商通过软件控制非学校IP地址用户的登录。校园网用户是指用户计算机的IP地址是本校校园网络IP范围,即用户上网必须通过学校网络中心连接,而不是通过商业ISP连接。
答:学科导航中的资源并非图书馆订购,而是图书馆从网上寻找到并推荐给用户的网站链接。可按分类类目查找,也可按关键词查找。
答:中国期刊网的全文必须用CAJ浏览器打开,所以,使用中国期刊网前必须下载最新版CAJ浏览器。
答:可以。如中国科学技术大学图书馆、复旦大学图书馆等的书目信息,可在主页上点击“书目查询”。
、怎样查找古籍书目?
答:可以到新馆五楼古籍部查找书名及分类目录卡片(善本古籍配有书本式目录)。
13、怎样查找港台书?
答:可在本馆主页上点击“书目查询”,得到相关信息后再去新馆五楼的港台书库查找。
14、我馆采用的图书分类方法是什么?
答:我馆图书分类按使用时间分为两段:我馆2000年以后购进的中外文图书均采用《中国图书馆图书分类法》,简称"中图法",也是我国图书馆普遍采用的图书分类法。而2000年以前购进的中文文科图书采用《中国人民大学图书馆图书分类法》(简称“人大法”)、中文理科图书及所有的外文图书采用《中国科学院图书馆图书分类法》(简称“科图法”)。
15、为什么有时候找不到某些过刊?
答:因为图书馆的期刊是一年后装订的,譬如2010年装订2009年的期刊。读者如找不到去年的过刊,说明此刊正在装订中,需等待一段时间,装订完成后会及时运回上架。
16、假期到期的图书何时归还?
答:图书还期如遇寒暑假或法定假日可以顺延。
17、流通部的图书可续借吗?可续多长时间?
答:在流通部续借的图书到期需继续使用,允许续借一次。续借时间为1个月。如逾期不还,将按有关规定处理。
答:实行图书过期罚款制度的目的是为维护大多数读者的利益,保障图书的正常流通。图书过期罚款和图书遗失赔款均按有关财务管理制度进入预算内,冲抵图书经费。
答:古籍书库主要收藏辛亥革命以前的古籍线装书;台湾商务印书馆影印文渊阁《四库全书》、古籍方志丛书、各类港台书、此外还有原合师院收藏的少量解放前出版的平装书。
答:本馆阅览室主要对硕士以上的研究生、本校教师及高年级的本科生闭架开放,校外读者须持证明。
答:本馆古籍不能复印,可在古籍阅览室阅览。
答:请你在本馆的主页里进入“书目查询”,用你需要的检索词进行快速检索;先选择“主题”或“题名”检索,在下面的“检索库”框中,选“期刊”项,再进行检索,此时检索出来的文献应该是你需要的杂志了。
23、1949年以前的中文旧报刊可以复印吗?
答:1949年以前的中文旧报刊由于资料珍贵、视同善本,故不能复印。
24、什么是分类号?什么是主题?
答: 分类和主题都是从文献知识内容的角度揭示和组织文献资料。分类法是按文献的学科知识属性揭示和组织文献,它依据一定的分类工具(分类法),采用字母或/和数字作为类目的标识符号。主题法则是以文献论述的事物、对象为依据,直接采用表达文献内容的主题名称揭示和组织文献资料。
25、什么是索书号?
答:书号又可称为排架号,表明馆藏中的某一文献的排架位置以便提取和归架的一套编号。一般由字母、数字和其它符号组成。本馆的索书号由分类号、著者号、卷册号等构成。
26、何为CALIS?
答:中国高等教育文献保障系统(China Academic Library & Information System,简称CALIS),是经国务院批准的我国高等教育“211工程”总体规划中两个公共服务体系之一。作为国家经费支持的中国高校图书馆联盟,CALIS的宗旨是,在教育部的领导下,把国家的投资、现代图书馆理念、先进的技术手段、高校丰富的文献资源和人力资源整合起来,建设以中国高等教育数字图书馆为核心的教育文献联合保障体系,实现信息资源共建、共知、共享,以发挥最大的社会效益和经济效益,为中国的高等教育服务。CALIS为全国、地区、省中心的三级文献保障体系。
27、CALIS的读者服务?
CALIS面向读者提供以下服务:
(1)公共检索:用户可以按照本校-本地区-邻近地区-北京-国外的顺序,在网上查找全国性或地区性的书刊联合目录数据库,了解所需文献是否有及在哪里收藏。也可以通过联机(或委托)检索CALIS国内外各种类型的文献数据库,得到某一学科或专题的详尽的文献线索乃至电子版全文。
(2)馆际互借:对于本馆没有的文献(如图书),在本馆用户需要时,根据CALIS统一的制度、协议和办法,向其他馆借入;反之,在其他馆用户提出互借请求时,借出本馆所拥有的文献,满足用户的文献需求。
(3)文献传递:对于本馆没有的文献(如期刊文章或学位论文),在本馆用户需要时,根据CALIS统一的制度、协议和办法,向其他馆获取;反之,在其他馆用户提出请求时,将本馆所拥有的文献传递给对方。
(4)电子资源导航:根据各校重点学科建设的需要进行统筹规划和分工,对网上的电子资源(如研究进展报告、电子期刊论文、研究机构、专家学者等)按图书馆学的原理和方法进行收集、加工和整序,形成虚拟图书馆资源,补充和扩大CALIS的文献资源,提供用户浏览和查询。
28、读者遇到问题可以通过哪些途径咨询?
答:可以向咨询部和新馆总咨询台的老师咨询,还可以通过我们的留言本提交问题,我们会及时给予答复。
答:图书馆目录是按特定的原则和方法组织起来的,揭示图书馆的馆藏文献。我们知道,图书馆采集的文献资料是无序的,若不经过整序处理,读者就犹如在大海中捞针,无法找到自己所需的文献资料,也不能知道该文献论述什么内容。图书馆目录的职能,通过对每一种文献的著录和标引,一方面揭示文献的内容特征和外部特征;另方面经过整序后,读者可按某种特定的途径进行检索。
答:首先下载并安装相关阅读软件,然后打开电子图书。
答:现刊是指当年出版的放置在现刊架上的期刊,或上一年出版但仍放在现刊架上尚未装订成合订本的期刊。过刊是指往年出版的、已装成合订本或尚未到齐散放在过刊架上的期刊。
答:在新馆的解放前期刊室,本校教职工和博士、硕士生、本科生可凭本人学生证直接来阅览室阅览,不用开证明。
答:请进入本馆主页-书目检索,输入你要查找的教师姓名,然后点击著者按钮,便可查到有关著作信息;进中国期刊网题录数据库、人大复印报刊资料索引光盘与网络数据库等,以教师姓名为检索词进行著者检索,可查到有关报刊论文信息。另有“师大文库”收有部分教师的著作,可查阅。
答:目前图书馆网上主要提供联机公共目录查询、学位论文查询、中外文网络数据库、全文电子图书、全文电子期刊、FTP资源等等,详见本馆主页-常见问题。其中电子资源仅限在校园网范围内检索。
答:请您进入师大图书馆主页,按“电子资源-超星数字图书馆”的顺序进入超星电子图书馆的界面,在信息检索框内直接检索。记住要下载和安装浏览器和注册器。
答:文献标识码是《中国学术期刊(光盘版)》的规范要求。按照论文的性质,其文献标识码分为A、B、C、D、E五类。具体为:
A----理论与应用研究学术论文(包括综述报告);
B----实用性技术成果(科技)、理论学习与社会实践总结(社科);
C----业务指导与技术管理性文章(包括领导讲话、特约评论等);
D----一般动态性信息(通讯、报道、会议活动、专访等);
E---文件、资料(包括历史资料、统计资料、机构、人物、书刊、知识介绍等);
作者可以根据上述分类原则,对所写文章标识一个文献标识码。
答:我校各院、系资料室的书刊目前已经进行电子著录,可直接检索使用。
校址:安徽省芜湖市花津南路 邮编:241003 电话:(
版权所有:安徽师范大学图书馆 &qq红包多功能控件下载【加QQ 九-游戏图集搜索 (共 0 个图集)
未找到和“qq红包多功能控件下载【加QQ 九九 ㈣⑹九八】”相关的图片。
用空格将多个关键词分开
简化字词继续查询
检查输入的文字是否有误Android中微信抢红包插件原理解析及开发思路
作者:尼古拉斯_赵四
字体:[ ] 类型:转载 时间:
本文给大家介绍Android中微信抢红包插件原理解析及开发思路,对微信抢红包插件原理相关知识感兴趣的朋友一起学习吧
自从去年中微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来。但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导致了。或许是网络的原因,而且这个也是最大的原因。但是其他的不可忽略的因素也是要考虑到进去的,比如在手机充电锁屏的时候,我们并不知道有人已经开始发红包了,那么这时候也是让我们丧失了一大批红包的原因。那么关于网络的问题,我们开发者可能用相关技术无法解决(当然在Google和Facebook看来的话,他们的理想是能够在任何地方都能连接互联网,当然在偏远的农村也是,不过我们期待他们有一天能够普及开来。到时候才是真正的互联网)。扯得有点远了。我们回归到正题,今天我们来看看使用技术来解决其他非网络问题。在充电锁屏的时候也可以自动帮我们抢红包。而且你要知道,机器抢红包的准确率是100%的,这个也许就是人和机器的区别。那么保证抢得准确率是100%的话,那就依赖于我们高效准确的算法实现了。下面就来看看原理实现。
当去年我看到抢红包那么火爆的时候,当时作为一个开发者心里是多么渴望开发一个插件出来,可是当时我们能想到的就是使用:
adb shell monkey
命令去模拟点击屏幕,但是那种方式有一个问题就是是无头绪的盲目点击,所以几乎会出现误点,点击成功率极其低下。所以当时就没有想到其他方法了,因为最近做了有关辅助功能相关的工作的时候,那么就发现这个功能可以用于抢红包。
其实现在我们可以去各大市场搜索一下看到,有很多抢红包的插件了。当然我们并不是用于商业化,这里只是来解析一下原理。我们会发现那些插件都有一个共同的特点是:第一步都是引导用户去开启辅助功能。
二、原理解析
关于辅助功能(AccessibilityService),如果又不了解的同学可以去Google一下,这个功能其实很有用的,但是他的出现的出发点是给那些肢体上有障碍的人使用的,比如手指不健全的用户,怎么才能滑动屏幕,然后打开一个应用呢?那么辅助功能就是干这些事,他的功能其实就是可以概括两句话:
第一、寻找到我们想要的View节点
第二、然后模拟点击,实现特定功能
我们知道Android中的View体系是一个树形结构,那么每一个View就是一个节点。所以我们可以查找到指定的节点,那么我们该如何查找到我们想要的节点呢?这里我们先看一下辅助功能(AccessibilityService)的用法
第一步、我们需要集成AccessibilityService类
我们需要自定一个Service然后继承AccessibilityService,当然还需要在AndroidManifest.xml中声明这个服务:
第二步、声明权限和配置
这个服务需要注明一个权限:
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
当然还要一个meta-data的声明,这个声明是对这个AccessibilityService的配置。我们看一下配置文件内容:
&?xml version="1.0" encoding="utf-8"?&
&accessibility-service xmlns:android="/apk/res/android"
android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:description="@string/desc"
android:notificationTimeout="100"
android:packageNames="com.tencent.mm" /&
这里我们看到有很多选项,我们看一下常用的几个属性:
1、android:accessibilityEventTypes="typeAllMask"
看属性名也差不多可以明白,这个是用来设置响应事件的类型,typeAllMask当然就是响应所有类型的事件了。当然还有单击、长按、滑动等。
2、android:accessibilityFeedbackType="feedbackSpoken"
设置回馈给用户的方式,有语音播出和振动。可以配置一些TTS引擎,让它实现发音。
3、android:notificationTimeout="100"
响应时间的设置就不用多说了
4、android:packageNames="com.example.android.apis"
可以指定响应某个应用的事件,这里因为要响应所有应用的事件,所以不填,默认就是响应所有应用的事件。比如我们写一个微信抢红包的辅助程序,就可以在这里填写微信的包名,便可以监听微信产生的事件了。
1、我们这些配置信息除了在xml中定义,同样也可以在代码中定义,我们一般都是在onServiceConnected()方法里进行
protected void onServiceConnected() {
AccessibilityServiceInfo info = getServiceInfo();
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
info.notificationTimeout = 100;
setServiceInfo(info);
info.packageNames = new String[]{"xxx.xxx.xxx", "yyy.yyy.yyy","...."};
setServiceInfo(info);
super.onServiceConnected();
2、这里我们一般都会在这里写上我们需要监听的应用的包名,但是有时候我们需要监听多个应用,那么这时候我们该怎么办呢?
这时候我们可以这么做:
第一种:我们在代码中注册多个应用的包名,从而可以监听多个应用
protected void onServiceConnected() {
AccessibilityServiceInfo info = getServiceInfo();
//这里可以设置多个包名,监听多个应用
info.packageNames = new String[]{"xxx.xxx.xxx", "yyy.yyy.yyy","...."};
setServiceInfo(info);
super.onServiceConnected();
第二种:我们在onAccessibilityEvent事件监听的方法中做包名的过滤(这种方式最常用)
public void onAccessibilityEvent(AccessibilityEvent event) {
String pkgName = event.getPackageName().toString();
if("xxx.xxx.xxx".equals(pkgName)){
}else if("yyy.yyy.yyy".equals(pkgName)){
}else if("....".equals(pkgName)){
第三步、在onAccessibilityEvent方法中监听指定的事件
比如我们需要监听有通知栏消息的事件:
public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
switch (eventType) {
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
这个事件类型很多的,我们可以查看AccessibilityEvent类的源码:
@Deprecated
public static final int MAX_TEXT_LENGTH = 500;
* Represents the event of clicking on a {@link android.view.View} like
* {@link android.widget.Button}, {@link poundButton}, etc.
public static final int TYPE_VIEW_CLICKED = 0x;
* Represents the event of long clicking on a {@link android.view.View} like
* {@link android.widget.Button}, {@link poundButton}, etc.
public static final int TYPE_VIEW_LONG_CLICKED = 0x;
* Represents the event of selecting an item usually in the context of an
* {@link android.widget.AdapterView}.
public static final int TYPE_VIEW_SELECTED = 0x;
* Represents the event of setting input focus of a {@link android.view.View}.
public static final int TYPE_VIEW_FOCUSED = 0x;
* Represents the event of changing the text of an {@link android.widget.EditText}.
public static final int TYPE_VIEW_TEXT_CHANGED = 0x;
* Represents the event of opening a {@link android.widget.PopupWindow},
* {@link android.view.Menu}, {@link android.app.Dialog}, etc.
public static final int TYPE_WINDOW_STATE_CHANGED = 0x;
* Represents the event showing a {@link android.app.Notification}.
public static final int TYPE_NOTIFICATION_STATE_CHANGED = 0x;
* Represents the event of a hover enter over a {@link android.view.View}.
public static final int TYPE_VIEW_HOVER_ENTER = 0x;
* Represents the event of a hover exit over a {@link android.view.View}.
public static final int TYPE_VIEW_HOVER_EXIT = 0x;
* Represents the event of starting a touch exploration gesture.
public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x;
* Represents the event of ending a touch exploration gesture.
public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x;
* Represents the event of changing the content of a window and more
* specifically the sub-tree rooted at the event's source.
public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x;
* Represents the event of scrolling a view.
public static final int TYPE_VIEW_SCROLLED = 0x;
* Represents the event of changing the selection in an {@link android.widget.EditText}.
public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x;
* Represents the event of an application making an announcement.
public static final int TYPE_ANNOUNCEMENT = 0x;
* Represents the event of gaining accessibility focus.
public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 0x;
* Represents the event of clearing accessibility focus.
public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x;
* Represents the event of traversing the text of a view at a given movement granularity.
public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 0x;
* Represents the event of beginning gesture detection.
public static final int TYPE_GESTURE_DETECTION_START = 0x;
* Represents the event of ending gesture detection.
public static final int TYPE_GESTURE_DETECTION_END = 0x;
* Represents the event of the user starting to touch the screen.
public static final int TYPE_TOUCH_INTERACTION_START = 0x;
* Represents the event of the user ending to touch the screen.
public static final int TYPE_TOUCH_INTERACTION_END = 0x;
* Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
* The type of change is not defined.
public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0x;
* Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
* A node in the subtree rooted at the source node was added or removed.
public static final int CONTENT_CHANGE_TYPE_SUBTREE = 0x;
* Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
* The node's text changed.
public static final int CONTENT_CHANGE_TYPE_TEXT = 0x;
* Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
* The node's content description changed.
public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 0x;
这里有很多事件,这些事件我们通过名字就可以看出来有很多我们可能都知道,比如当窗口发生变化的时候,当某个View被点击了,被滚动了等消息都是可以知道的。那么我们有了这些事件我们就可以做我们的事情了,因为我们知道事件触发了。
第四步、查找到我们想要处理的节点View
这里系统提供了两个方法让我们来进行查找想要的节点View
第一种是通过节点View的Text内容来查找
findAccessibilityNodeInfosByText("查找内容")
这种方式查找,就是像TextView,Button等View有文本内容的,可以使用这种方式快速的找到。
第二种是通过节点View在xml布局中的id名称
findAccessibilityNodeInfosByViewId("@id/xxx")
这个一般很难知道,但是我们在查找系统控件的时候还是可以做的,因为系统的控件的id是可以知道的,而且是统一的。
(关于这两个方法我们在写网页爬虫程序的时候可能知道,在html中通过tag/name/id等信息可以找到一个节点,原理都类似)
第五步、模拟点击指定事件
我们找到我们想要的View节点,调用方法模拟事件:
performAction(AccessibilityNodeInfo.ACTION_CLICK)
调用这个方法即可,当然这里的参数就是指定事件的名称,这个和AccessibilityEvent中监听的那些事件是一一对应的,这里是模拟点击事件,我们当然可以模拟View的滚动事件,长按事件等。
三、实战案例:微信抢红包插件
上面我们就介绍了一个辅助功能开发的具体步骤,那么下面就通过一个简单的例子,来实战一下
例子:微信自动抢红包插件
首先我们来看一下微信抢红包的流程:
第一步、我们在通知栏会接收到一个微信红包的消息
我们监听通知栏事件:
AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED
然后查看通知栏的消息中是否有:[微信红包] 的文本内容
是的话,就走进入第二步
第二步、我们模拟打开通知栏
打开微信如下图:
我们查找包含有:领取红包 的文本内容的节点View,然后模拟点击,进入第三步:
第三步、我们点击领取红包
这里我们在查找包含有:拆红包 的文本内容的节点View,然后模拟点击
下面我们来看一下代码中的具体实现:
package krelve.demo.
import java.util.L
import android.accessibilityservice.AccessibilityS
import android.accessibilityservice.AccessibilityServiceI
import android.annotation.SuppressL
import android.app.N
import android.app.PendingI
import android.app.PendingIntent.CanceledE
import android.util.L
import android.view.accessibility.AccessibilityE
import android.view.accessibility.AccessibilityNodeI
public class RobMoney extends AccessibilityService {
public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
switch (eventType) {
//第一步:监听通知栏消息
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
List&CharSequence& texts = event.getText();
if (!texts.isEmpty()) {
for (CharSequence text : texts) {
String content = text.toString();
Log.i("demo", "text:"+content);
if (content.contains("[微信红包]")) {
//模拟打开通知栏消息
if (event.getParcelableData() != null
event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentI
pendingIntent.send();
} catch (CanceledException e) {
e.printStackTrace();
//第二步:监听是否进入微信红包消息界面
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
String className = event.getClassName().toString();
if (className.equals("com.tencent.mm.ui.LauncherUI")) {
//开始抢红包
getPacket();
} else if (className.equals("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI")) {
//开始打开红包
openPacket();
@SuppressLint("NewApi")
private void openPacket() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List&AccessibilityNodeInfo& list = nodeInfo
.findAccessibilityNodeInfosByText("抢红包");
for (AccessibilityNodeInfo n : list) {
n.performAction(AccessibilityNodeInfo.ACTION_CLICK);
@SuppressLint("NewApi")
private void getPacket() {
AccessibilityNodeInfo rootNode = getRootInActiveWindow();
recycle(rootNode);
* 打印一个节点的结构
* @param info
@SuppressLint("NewApi")
public void recycle(AccessibilityNodeInfo info) {
if (info.getChildCount() == 0) {
if(info.getText() != null){
if("领取红包".equals(info.getText().toString())){
//这里有一个问题需要注意,就是需要找到一个可以点击的View
Log.i("demo", "Click"+",isClick:"+info.isClickable());
info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
AccessibilityNodeInfo parent = info.getParent();
while(parent != null){
Log.i("demo", "parent isClick:"+parent.isClickable());
if(parent.isClickable()){
parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);
parent = parent.getParent();
for (int i = 0; i & info.getChildCount(); i++) {
if(info.getChild(i)!=null){
recycle(info.getChild(i));
public void onInterrupt() {
代码没什么好说的了,按照我们之前说的三个步骤来就可以了,但是这里需要注意点细节上的问题:
1、我们在监听到通知栏的消息的时候,调用如下代码来进行通知栏的消息点击
if (content.contains("[微信红包]")) {
//模拟打开通知栏消息
if (event.getParcelableData() != null
event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentI
pendingIntent.send();
} catch (CanceledException e) {
e.printStackTrace();
2、我们在模拟点击通知栏消息之后,还是需要监听:AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED 这个事件,这个事件我们以后会经常用到,这个事件就是在窗口发生改变的时候发出来的事件,很常用的,比如我们可以通过这个事件来监听TopActivity,然后得到包名,这也是一个实现应用锁的一个原理。
3、我们在查找领取红包的时候,模拟点击的时候做了一个工作,就是从“领取红包”文本的控件View网上查找,查找到一个可以点击的View出来,然后模拟点击
if(info.getText() != null){
if("领取红包".equals(info.getText().toString())){
//这里有一个问题需要注意,就是需要找到一个可以点击的View
Log.i("demo", "Click"+",isClick:"+info.isClickable());
info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
AccessibilityNodeInfo parent = info.getParent();
while(parent != null){
Log.i("demo", "parent isClick:"+parent.isClickable());
if(parent.isClickable()){
parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);
parent = parent.getParent();
这里为什么这么做,其实原理很简单,因为我们不知道微信他的界面布局,也不知道他对哪个View进行了setOnClickListener。我们可以写一个例子,performAction方法只对调用了setOnClickListener方法的View模拟点击才有效,其实看View的源码也是可以看出来的.这里就不多解释了。所以我们就需要得到一个View节点之后,从下往上找,直到找到一个可以click的View为止。
技术延展:
我们其实还可以使用DDMS工具里的Dump View Hierarchy For UI Automator 去分析微信UI结构,这个方法也是我后面才发现的,比上面的代码更有效,如下图:
这里我们可以看到View的详细布局,还有每个View的属性,还有很重要的信息resource-id,这个就是我们在xml中定义的id,这个id我们也可以使用前面说到的findAccessibilityNodeInfosByViewId("@id/xxx")来查找控件了
这个也算是学习了,学会使用DDMS来分析View结构。
关于微信抢红包的原理解析上面已经做了分析了,但是要想做到极致,这里还有很多问题的,比如我们还需要过滤一些已经领取过的红包,这样的话效率也是很高的。这个都是算法精确的问题了,我想在这里说的是,我们不仅可以用辅助功能来实现抢红包,还可以实现很多功能,比如
1、静默安装
对于这两个要求,我们或许很难得到,那么现在如果有了辅助功能,我们就好做了:
我们可以监听系统的这个安装界面,然后得到安装节点View,然后模拟点击即可,卸载也是同样的原理
2、强制停止应用
我们知道Android中停止应用有很多方法,kill进程,stopService,但是这些方法,有一些应用它们都是有对策的,那么我们之前用到的强制停止的方法是获取root权限调用系统的forceStop的api来停止,但是前提还是有root。那么现在如果我们有了辅助功能的话,我们可以这么做:
我们可以监听系统的应用详情页面,然后找到:结束运行的节点View,然后模拟点击即可
当然上面我就说了两个简单的例子,还有很多辅助功能都是可以做的。他的好处就是不需要root权限。但是他也是需要用户授权的:
如果用户没有授权的话,那么所有的工作都没办法开始了,所以说这个方法也不是万能的。当然说句题外话:有了辅助功能的话,他的危险性比root之后的危险性更大,比如我们上面的抢红包插件,其实我们稍作修改,就可以获取微信通讯录信息,微信支付的密码。这些事都是可以做的,所以说,我们在作为用户的时候,进行授权的时候还是需要三思而后行。
关于辅助功能,之前没有太多的接触,是在一次工作中用到了这个功能,就去学习了一下,作为自己的兴趣,就延展了学习了如何写一个微信抢红包的插件,同时可以考虑了使用辅助功能能够做我们之前需要root做的事情。当然辅助功能是google对于肢体上有障碍的人开发出来的一个功能,我们开发者或许使用这个功能,可以做一下产品的拓展功能,当然这些是google没有想到的事情,但是这个至少是我们开发者在以后的开发道路上的一个解决问题的一个办法和途径,谨记此功能!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 红包多功能控件1.0 的文章

 

随机推荐