你的分享就是我们的动力 ---﹥

弹出dialog后不可点击back回来,用广播退出所有activity

弹出dialog后不可点击back返回,用广播退出所有activity

dialog的代码是一个登陆状态异常后弹出,让强制重新登录的弹窗:

	AlertDialog.Builder builder = new AlertDialog.Builder(
		getActivity(),
		android.R.style.Theme_Holo_Light_Panel);
		builder.setMessage("登录异常,请点退出重新登录");
		builder.setPositiveButton("退出",
			new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog,int which) {
			Intent intent = new Intent(getActivity(),LoginActivity.class);
			startActivity(intent);
			}
		});
		builder.setCancelable(false);//设置不可点击back关闭dialog
		builder.show();
然后还要写不让点击back的代码:

//重写back键当Dialog设置为builder.setCancelable(false);时back不执行
	public boolean dispatchKeyEvent(android.view.KeyEvent event) {
		switch (event.getKeyCode()) {
		case KeyEvent.KEYCODE_BACK: {
			return false;
		}
		}
		return true;
	};
以上就是dialog不可点击back退出的代码

在写项目的时候遇到了activity启动多个,然后在后边的activity中需要一次性退出的问题。网上有说用

 System.exit(0); 可以直接退出(没有去试验),也说用建立个活动管理器,将activity都装进去。在退出的时候遍历这个集合然后依次退出。我还没试过。正好很久没有写广播了,就试验了下用广播退出的方式
一下就是实现的代码:
在之前的activity中写接收广播的代码:
	@Override
	protected void onResume() {
		super.onResume();
		IntentFilter inFilter=new IntentFilter();
		inFilter.addAction("finish");//接收的广播名称
		registerReceiver(bReceiver, inFilter);
动态广播内部类:
	//退出广播
	private BroadcastReceiver bReceiver=new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			finish();
			
		}
	};

需要退出全部的呢个activity:
//我是写在了需要退出的这个activity的back按钮这里
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (BaseConfig.quicklogin == 1) {
			Intent intent=new Intent();
			intent.setAction("finish");
			sendBroadcast(intent);		
		}
		return super.onKeyDown(keyCode, event);
	}
这样在这个activity中。点击back的时候就直接退出了这个应用,而不是一层层返回。