利用广播BroadcastReceiver实现登录强制下线功能
在这里面登录界面里面的用户名和密码为默认的“admin””123456” 可以在LoginActivity里面进行修改,该例子只是简单的说明怎么样BroadcastReceiver进行强制性的下线。
原理
在应用程序中经常会遇到强制下线的情况,比如qq在别处登录,本机的你就被强制下线了。其实强制下线的原理很简单,就是弹出一个对话框让你没办法进行去他的操作,只能点击对话框的“确定”按钮进行重新登录验证身份,但是我们被通知需要强制下线的时候可能处于任何一个界面,肯定不能在没一个界面都写一个对话框。此时就用到了广播。在本例中点击button后触发广播,然后提交给ForceOfflineReceiver类进行接受广播,进行销毁所有的活动,完成用户强制性下线
1、首先创建一个Activity管理类“ActivityCollector”
在这里面进行Activity的添加 删除 和销毁所有,能够在后面强制下线时,销毁所有的Activity,只显示一个对话框
package com.example.chencong.broadcastbestpractive;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by chencong on 2017/3/16.
*/
public class ActivityCollector {
/**
* 创建一个Activity类来管理所有的活动
*/
public static List<Activity> activities = new ArrayList<Activity>();
/**
* 定义泛型数组activities 添加activity活动的方法addActivity
* @param activity
*/
public static void addActivity(Activity activity){
activities.add(activity);
}
/**
* 移除activity活动的方法removeActivity
* @param activity
*/
public static void removeActivity(Activity activity){
activities.remove(activity);
}
/**
* 遍历所有活动将其停止完成
*/
public static void findAll(){
for (Activity activity: activities) {
if (!activity.isFinishing()){
activity.finish();
}
}
}
}
2、然后创建一个基类BaseActivity
之所以创建这个基类,是为了方便对所有的Activity进行管理(添加 删除 销毁所有),因为在后面创建的Activity是继承此Activity的,能够保证在创建的时候就已添加到ActivityCollector中。
package com.example.chencong.broadcastbestpractive;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
/**
* 定义父类BaseActivity
*/
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建活动时,将其加入管理器中
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//销毁活动时,将其从管理器中移除
ActivityCollector.removeActivity(this);
}
}
3、一个简单的登录界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout x