QQ强制下线的实现,Activity与Broadcast组件的在应用

来源:互联网 发布:端口 英文 编辑:程序博客网 时间:2024/05/22 12:38

        今天学习了一个效果,就是QQ强制下线,相信大家在登陆QQ的过程中,当你在其它设备登陆QQ的时候就会被强制下线,不管你此时停留在哪个界面,那这是怎么实现的呢?实现这个功能可以加深我们对广播有个更好的认识。当在QQ其它设备登陆时,当前设备会弹出一个对话框,然后点击后回到登陆界面,那么有两点知识:

1.      我们四大组件之一,Broadcast Receiver广播接收者的知识需要掌握

2.      四大组件之一,Activity的在深入,我们需要关闭所有活动返回登陆界面,所以我们需要关闭所有活动的实现。

       先看一下效果图

一.  Activitu

     关于这个组件的基本知识、它的周期我就不说了。但是有一种情况就是当我们连续打开了三个界面,岂不是要按三次Back键才能返回,如何能随时随地的推出呢。


   1.我们新建一个ActivityCollector类作为活动管理器,代码如下:

             

在活动管理器中,我们通过一个List在暂存活动,然后提供三个方法,作用从方法名就应该能看出。


        2.创建BaseActivity作为所有活动的父类,代码如下:


从此不管在什么地方,只需要调用ActivityCollector.finishall()方法就可以了。


3.登陆界面代码不在粘贴了,很简单,两个EditText一个Button,一会看效果图就明白了。           登陆的逻辑实现代码如下:



二. Broadcast Recevier

       

       1. 登陆后进入“主界面”,只有一个button一个TextView。但是我们要在button的点击事件里加一条广播,这个是重要的!!广播的值com.example.demo.FORCE_OFFLINE,这条广播就是通知程序让用户强制下线的。也就是说强制用户下线的逻辑是要写在广播接收器里面的,这样强制下线的功能就不会依附于任何界面,只要这样一条广播,就可以完成强制下线的操作了。

       广播接收器的代码如下:



2.我们新建了一个对话框,值得注意的是,我们调用了setCancelable()方法将对话框设置为不可取消,否则用户一个Back键取消了对话框然后继续使用程序了。对于FLAG_ACTIVITY_NEW_TASK这个标志可以看一下源码介绍,我就不翻译了

       


3.最后在AndroidManifest文件中配置一下就可以了




0 0