今天学习了一个效果,就是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文件中配置一下就可以了