广播的最佳实践-实现强制下线功能

强制下线功能需要先关闭掉所有的活动,然后回到登录界面.前面第二章的最佳实现已经实现了关闭所有活动的功能了.
 *         1.我们先创建一个ActivityCollector类用于管理所有的活动,里面定义了一个Activity集合,还有方法,这些方法用于
 *         将这个Activity集合中的元素添加,移除,和finish所有的Activity元素.
 * 
 *         2.再定义一个BaseActivity,这是所有类
 *         的父类,待会儿让所有类继承自这个类,这个类里面onCreate方法里面是添加当前Activity到上面那个集合里面去.
 *         onDestroy()方法里面调用ActivityCollector类的方法移除当前Activity,因为已经销毁了,不需要再管理了.
 * 
 *         3.写一个登录界面,登录成功后是主界面,主界面里面放一个按钮,按钮的点击事件是发送一条自定义的广播.
 *         这条广播就是通知程序强制用户下线的,也就是说强制用户下线的逻辑并不是写在MainActivity里的,而是
 *         应该写在接收这条广播接收器里面,这样强制下线功能就不会依附于任何的界面,不管是在程序的任何地方,只需要
 *         发出这样一条广播,就可以完成强制下线的操作了
 *         
 *         4.新建一个类,ForceOfflineReceiver,这是广播的接收器,继承自BroadcastReceiver.在onReceive()
 *         里面创建一个对话框,这个对话框需要设置类型为TYPE_SYSTEM_ALERT,否则无法弹出对话框.而且这个对话框
 *         用户不能取消.用户点击确定后,调用LoginActivity(登录界面),在广播里面调用活动,需要加入
 *         FLAG_ACTIVITY_NEW_TASK这个标志.实现了强制下线.
 *         

 *         5.在应用程序的配置文件中,需要声明权限(调用了系统级别的对话框),声明广播.自定义的广播.

下面是广播接收器的代码

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 forced to be offline. Please try to login again");
		dialogBuilder.setCancelable(false);  //将对话框设置为不可取消
		dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				ActivityCollector.finishAll();   //销毁所有活动
				
				//启动活动
				Intent intent = new Intent(context,LoginActivity.class);
				//由于是在广播里启动活动,所以需要加入FLAG_ACTIVITY_NEW_TASK这个标志
				intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				context.startActivity(intent);  //重新启动LoginActivity
			}
		});
		AlertDialog alertDialog = dialogBuilder.create();
		
		//需要设置AlertDialog的类型,保证在广播接收器中可以正常弹出
		//需要把对话框的类型设为TYPE_SYSTEM_ALERT,不然它将无法在广播接收器里弹出
		alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
		alertDialog.show();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值