您的位置:首页 > 移动开发 > 微信开发

浅谈《微信抢红包原理》

2016-03-30 17:33 656 查看
现在很多人手机可能都安装了抢红包软件,为了过年抢红包不错过,当然会下载来用用,其实,现在的抢红包软件,基本都是通过监听通知栏消息“[微信红包]”字样,作为识别是红包的依据的,可能大多数人都会想,android有抢红包的,那苹果的呢??当然苹果的也有,只不过,研发了也没用,上传不了APP stroe,既然上传不了,那更别说别的用户能够下载咯(除非越狱Iphone)。。。所以,我在这里浅谈Android抢红包软件的开发原理!
     原理很简单:监听通知栏消息,然后判断消息节点是否包含"[微信红包]"字样,包含,跳转红包界面,然后检测红包所在聊天界面的根节点,然后实现,系统点击事件方法!判断节点是否包含"领红包"字样,实现点击,继续判断是否包含“拆红包”字样,实现点击!这就是完整一个实现原理,看起来,很简单吧!!可是做起来并不是那么的顺风顺水!
    用到的类是


    AccessibilityService 名称为:无障碍服务类
             这个类其实就是一个辅助类,可以实现的功能有,窗口变化,按钮点击,以及手机焦点等等,当然还有其他的功能啦!实现它的服务需要在手机设置里面->辅助功能在这里面找到你自己实现的辅助类,然后打开它就可以进行我们一系列的监听了。在这里最主要的一个方法就是


onAccessibilityEvent
    复写此方法是重中之重,如果不复写的话,可能程序不会有任何的反应! 
    当我们注册了监听事件的时候,当有事件发生就会通知我们这个函数,但是一定要注意这个函数通知是异步的,当然很多朋友就会问这个是怎么通知到这里来的呢?他是通过AccessibilityDelegate这个代理类,发送出来的,这个类有个方法sendAccessibilityEvent可以发送事件。那这个类又怎么和我们的窗口联系呢?这里举个例子
4000
。比如我们的View类里面有个setAccessibilityDelegate这个方法,是不是这下一切都明了了呢?然后就是调用我们的find函数去当前节点里面找到我们需要的节点信息,通过模拟点击事件来安装我们的软件,当然如果是输入框也是可以模拟输入的哦。


onServiceConnected


在这个回调函数里面可以配置我们当前的Service的信息,可以看我上面的代码都写得很清楚。但是记得也可以在我们的xml里面配置我们的Service的信息,这里我也是在xml里面配置的信息。在我们的res文件夹下面新建一个文件夹xml然后在里面新建一个xml文件accessibility.xml。
 <?xml
version=
'1.0'
 
encoding=
'utf-8'
?>

<accessibility-service
xmlns:android=
'http://schemas.android.com/apk/res/android'


android:accessibilityEventTypes=
'typeAllMask'


android:accessibilityFeedbackType=
'feedbackGeneric'


android:canRetrieveWindowContent=
'true'


android:description=
'@string/testaccessibility'


android:packageNames=
'com.android.packageinstaller'



android:notificationTimeout=
'100'
 
/>
   

这里需要提醒的是配置的时候packageNames这个就是你要监听的包名,这里我们需要监听的是安装的信息,所以包名就是com.android.packageinstaller,可以有多个用逗号隔开,accessibilityEventTypes这个是监听的事件。
记得配置我们的Service在Mainfiset清单里面。比如微信的其中包名就是 com.tencent.uichat


 <service

android:name=
'com.bobo.accessbility.WindowAccessibilitySeivice'




android:description=
'@string/testaccessibility'


android:label=
'accessibility'


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/accessibility'
 
/>


</service>

别人的技术才是牛逼!小弟只是菜鸟。可以借鉴以下博客:

      http://blog.csdn.net/jiangwei0910410003/article/details/48895153
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息