序的任何地方,只需要发出这样一条广播,就可以完成强制下线的操作了。
那么毫无疑问,接下来我们就需要创建一个广播接收器了,新建ForceOfflineReceiver继承自BroadcastReceiver,代码如下所示:public class ForceOfflineReceiver extends BroadcastReceiver { @Overridepublic 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 tryto login again.");dialogBuilder.setCancelable(false);dialogBuilder.setPositiveButton("OK",new DialogInterface.OnClickListener() { @Overridepublic void onClick(DialogInterface dialog, int which) { ActivityCollector.finishAll(); // 销毁所有活动Intent intent = new Intent(context,LoginActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent); // 重新启动LoginActivity}});AlertDialog alertDialog = dialogBuilder.create();// 需要设置AlertDialog的类型,保证在广播接收器中可以正常弹出alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);alertDialog.show();}}这次onReceive()方法里可不再是仅仅弹出一个Toast 了,而是加入了较多的代码,那我们就来仔细地看一下吧。首先肯定是使用AlertDialog.Builder 来构建一个对话框,注意这里一定要调用setCancelable()方法将对话框设为不可取消,否则用户按一下Back 键就可以关闭第一行代码——Android212对话框继续使用程序了。然后使用setPositiveButton()方法来给对话框注册确定按钮,当用户点击了确定按钮时,就调用ActivityCollector 的finishAll()方法来销毁掉所有活动,并重新启动LoginActivity 这个活动。另外,由于我们是在广播接收器里启动活动的,因此一定要给Intent 加入FLAG_ACTIVITY_NEW_TASK 这个标志。最后,还需要把对话框的类型设为TYPE_SYSTEM_ALERT,不然它将无法在广播接收器里弹出。