强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线。实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要点击对话框中的确定按钮,然后回到登录界面即可。下面我们就来一步一步的实现这个功能:

第一步:创建一个活动管理器ActivityCollector,用于管理所有的活动

7b1c4f71d14e6c459d825732a8da772a.png

第二步:创建所有活动的父类BaseActivity,继承AppCompatActivity

因为所有的活动都是继承该活动,所有我们在该活动中动态注册广播接收器,这里我们通过创建内部类的方式定义了广播接收器,然后重写了:onResume()方法、onPause()方法来

分别注册和取消注册广播接收器。因为我们始终需要保证只有处于栈顶的活动才能接收到这条强制下线广播,非栈顶的活动不应该也没有必要去接收这条广播,所以写在onResume()方法和onPause()方法中就可以很好的解决这个问题,当一个活动失去栈顶位置时,就会自动取消广播接收器的注册。

5bd6c1462565959243f0881011501efa.png

56e6a14f1e5f245d30709b720e96b798.png

第三步:创建登录界面LoginActivity,布局文件为:activity_login.xml

登录布局最外层是个纵向的LinearLayout,里面包含3个直接子元素:第一行是横向LinearLayout,用于输入账号信息;第二行也是一个横向的LinearLayout,用于输入密码信息;第三行是一个登录按钮。登录后的界面是:MainActivity

d2c606108a8c355dc0861a316cb22e18.png

ced3ffd53c36999e8271afad8f57ddbf.png

第四步:在登录成功后的界面(MainActivity)上设置一个按钮,点击这个按钮发送广播,在该活动下加入了强制下线的功能。

点击按钮,发送一条广播,广播的值为:com.workspace.hh.broadcastbestpractice.FORCE_OFFLINE.这条广播用于通知程序强制用户下线。而强制下线的逻辑是写在接收这条广播的广播接收器中的,这样做使得强制下线功能不依附于任何的界面,不管是在程序的任何地方,只需要发出一条广播,就可以完成强制下线的操作了。

3f34287be2559d25fffda6031b5b2b89.png

ed5db2d37f0f64d37f8d2c70f59bacdd.png

第五步:在AndroidManifest中将主活动设置为:LoginActivity.

9101b12579f2bb0ea177b5a0f0506624.png

第六步:运行程序,用户名或密码不正确(左),点击按钮发送广播(中),点击“OK”按钮强制下线(右)

c133059c854c3dc60277996d7c85858c.pngaf5d764d56d831fc248b21952174c9f1.png 

ec9ad820e1393044e6aea70f3240ddf7.png

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐