强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线。实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要点击对话框中的确定按钮,然后回到登录界面即可。下面我们就来一步一步的实现这个功能:
第一步:创建一个活动管理器ActivityCollector,用于管理所有的活动
第二步:创建所有活动的父类BaseActivity,继承AppCompatActivity
因为所有的活动都是继承该活动,所有我们在该活动中动态注册广播接收器,这里我们通过创建内部类的方式定义了广播接收器,然后重写了:onResume()方法、onPause()方法来
分别注册和取消注册广播接收器。因为我们始终需要保证只有处于栈顶的活动才能接收到这条强制下线广播,非栈顶的活动不应该也没有必要去接收这条广播,所以写在onResume()方法和onPause()方法中就可以很好的解决这个问题,当一个活动失去栈顶位置时,就会自动取消广播接收器的注册。
第三步:创建登录界面LoginActivity,布局文件为:activity_login.xml
登录布局最外层是个纵向的LinearLayout,里面包含3个直接子元素:第一行是横向LinearLayout,用于输入账号信息;第二行也是一个横向的LinearLayout,用于输入密码信息;第三行是一个登录按钮。登录后的界面是:MainActivity
第四步:在登录成功后的界面(MainActivity)上设置一个按钮,点击这个按钮发送广播,在该活动下加入了强制下线的功能。
点击按钮,发送一条广播,广播的值为:com.workspace.hh.broadcastbestpractice.FORCE_OFFLINE.这条广播用于通知程序强制用户下线。而强制下线的逻辑是写在接收这条广播的广播接收器中的,这样做使得强制下线功能不依附于任何的界面,不管是在程序的任何地方,只需要发出一条广播,就可以完成强制下线的操作了。
第五步:在AndroidManifest中将主活动设置为:LoginActivity.
第六步:运行程序,用户名或密码不正确(左),点击按钮发送广播(中),点击“OK”按钮强制下线(右)