思路:
- 首先要有一个登陆界面
- 获取登陆界面的用户名和密码,判断如果正确,登陆到主界面
- 创建一个强制下线广播接收器,接收器接收到这条广播后,弹出 一个强制下线通知,用户点击重新登陆按钮,跳转到主界面,跳转之前应该销毁所有的Activity
- 在主界面中发出一条强制下线的广播(其实这条广播可以是在任何程序中发出的)
- 在主配置文件中添加系统通知权限,注册Activity和receiver
- 广播接收器接收到强制下线通知,弹出对话框,用户点击重新登陆
重点讲解
关于如何销毁所有活动
当系统发出用户下线广播时,用户确认后要转到登陆界面,这时候销毁所有的Activity,我使用的方法是新建一个基类BaseActivity,让所有的类都从它继承,再新建一个类管理持有所有的Activity引用。
代码模块
广播接收器:
public class ForceOfflineReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
//弹出强制下线通知的对话框创建者对象
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
//设置通知标题
dialogBuilder.setTitle("Warning");
//设置通知内容
dialogBuilder.setMessage("You are foced to be offline, please try to login again!");
//设置通知按钮和响应事件
dialogBuilder.setPositiveButton("嗯嗯", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishAll();//销毁所有Activity,进入登陆界面
//使用传过来的上下文,即发送该广播的应用的上下文
Intent intent = new Intent(context, LoginActivity.class);
//因为我们是在接收器里启动活动的,因此加入这个标志才能启动Acitvity
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
//创建对话框
AlertDialog alertDialog = dialogBuilder.create();
//设置对话框可以在广播接收器中弹出
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
//显示对话框
alertDialog.show();
}
}
发出强制下线通知
Intent intent = new Intent("com.example.forceoffline.FORCE_OFFLINE");
sendBroadcast(intent);
怎么能一下销毁所有活动
需要两个帮助类,ActivityCollector和BaseActivity,
所有的活动从BaseActivity继承,所有的活动对象添加到ActivityCollector中。
public class ActivityCollector {
public static ArrayList<Activity> activityList = new ArrayList<Activity>();
public static void add(Activity activity) {
activityList.add(activity);
}
public static void remove(Activity activity) {
activityList.remove(activity);
}
public static void finishAll() {
for(int i=0; i<activityList.size(); i++) {
Activity activity = activityList.get(i);
if(!activity.isFinishing()) {
activity.finish();//结束当前activity
}
}
}
}
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//一个活动新创建时,添加到活动列表中
ActivityCollector.add(this);
}
@Override
protected void onDestroy() {
//一个活动销毁时从活动列表中删除
ActivityCollector.remove(this);
super.onDestroy();
}
}
添加系统通知权限
<!-- 添加弹出系统通知权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>