只要在界面上弹出一个对话框让用户无法进行其他操作,必须点
对话框的确定按钮,然后返回到登陆界面,可是存在着一个问题
强制下线时可能存在任何一个界面,难道每个界面都要写对话框
,这事我们就应该用到广播和广播接收者
我写了一个例子思路是:
LoginActivity登陆后跳到----》HomeActivity发广播----》
ForceOfflineReceiver中销毁所有的activity然后启动LoginActivity
怎样一次销毁所有activity,前面写过例子
http://blog.csdn.net/zhaihaohao1/article/details/42080287
项目结构:
核心代码:
LoginActivity
/**
*主界面
*登录并跳转
*/
public class LoginActivity extends BaseActivity {
private EditText accountEdit;
private EditText passwordEdit;
private Button login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
accountEdit=(EditText) findViewById(R.id.account);
passwordEdit=(EditText) findViewById(R.id.password);
login=(Button) findViewById(R.id.login);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String yonghuming = accountEdit.getText().toString().trim();
String mima = passwordEdit.getText().toString().trim();
if (yonghuming.equals("admin")&&mima.equals("123456")) {
Intent intent = new Intent();
intent.setClass(LoginActivity.this, HomeActivity.class);
startActivity(intent);
}else {
Toast.makeText(LoginActivity.this, "信息错误", 10).show();
}
}
});
}
}//class
HomeActivity
/**
*发广播的界面
*/
public class HomeActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Button forceoffline = (Button) findViewById(R.id.force_offline);
forceoffline.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent("QiangZhiXiaXian");
sendBroadcast(intent);
}
});
}
}//class
ForceOfflineReceiver
/**
*
*广播接收者,没有界面,但是可以显示对话框或者吐丝
*在广播中销毁所有的activity,并只启动LoginActivity。
*
*
*
*/
public class ForceOfflineReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
AlertDialog.Builder dialogBuilder=new AlertDialog.Builder(context);
dialogBuilder.setTitle("强制下线");
dialogBuilder.setMessage("广播接收者中,强制下线,请重新登录");
dialogBuilder.setCancelable(false);
dialogBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public 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();
}
}//class
BaseActivity
/**
*
* 调用方法加载,或移除activity的匿名对象
*
*/
public class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}//class
ActivityCollector
/**
* 把所有activity的对象放到list中
*
*/
public class ActivityCollector {
public static List<Activity>activities=new ArrayList<Activity>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for (Activity activity:activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}//class
主清单中
系统级别的对话框,声明权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
注册广播接收者
<receiver android:name="com.zhh.android.ForceOfflineReceiver">
<intent-filter >
<action android:name="QiangZhiXiaXian"/>
</intent-filter>
</receiver>
其他的activity也要注册
如果没有明白下载我的例子
http://download.csdn.net/detail/zhaihaohao1/8311537