强制下线功能的实现,关键是在于,如果有广播的发出,则会使的程序退回到登陆页面
具体实现参考第一行代码的 5.5
怎么操作呢
1 ActivityCollector 活动管理家,方便后面一口气删除活动
2 BaseActivity 基本活动 让所有活动继承自他
3 登陆页面 loginAcitivity
这么有一个输入帐号,输入密码,都是形式主义啦
4 登陆进去后有一个界面,在里面有个按键,可以发送广播
5 写一个广播接收器,来接收这个广播,执行操作退出当前界面,回到登陆的界面(这就达到了下线的目的)
在广播接收器里面,用到了Alertdialog这个控件
这个控件,在于比较重要的操作时,让你一定看见,是一个全屏的显示。就和Windows7有时候会弹出一个框框,让你点击确定那种
然后对于这个Alertdialog的确定按键,设置删除活动,重启动login界面,一切就好了
我在编写的时候,发现当登陆进去后,发送广播,就崩溃。也不知道什么原因,看不懂下面给的信息,然后就只有拼命检查代码
看来看去,也没看出问题来
然后我一步一步的检查,用toast来检查,发现不知道为什么,广播是收到了的,但是无法从receiver中启动这个alertdialog 这真是奇了怪了,权限什么的都给了的
就和书上做的一模一样。
不行就算了。。我采用了一个折中的办法,从receiver中启动一个alertdialogAcitivity的活动,然后在这个活动中,启动alertdialog ,再执行那些删除所有活动,启动登陆界面login
效果几乎一样
但是,为什么我这里就不能从receiver中启动alertdialog呢
这不科学啊,别人都行,我的却不行。我有点怀疑是因为不是原生态android
部分改动的代码
public class ForeceOfflineReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
Toast.makeText(context,"ok",Toast.LENGTH_SHORT).show();
Intent Start = new Intent(context,alertDialog.class);
Start.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(Start);
}
}
public class alertDialog extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alert_dialog);
AlertDialog.Builder dialog=new AlertDialog.Builder(this);
dialog.setTitle("this is a alertdialog");
dialog.setMessage("something important");
dialog.setCancelable(false);
dialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishAll();
Intent intent=new Intent(alertDialog.this,LoginActivity.class);
startActivity(intent);
}
});
dialog.show();
}
}