您的位置:首页 > 其它

Adroid中广播接收者的使用,实现强制下线功能

2014-12-29 16:22 435 查看
强制下线的思路:

只要在界面上弹出一个对话框让用户无法进行其他操作,必须点

对话框的确定按钮,然后返回到登陆界面,可是存在着一个问题

强制下线时可能存在任何一个界面,难道每个界面都要写对话框

,这事我们就应该用到广播和广播接收者

我写了一个例子思路是:

LoginActivity登陆后跳到----》HomeActivity发广播----》

ForceOfflineReceiver中销毁所有的activity然后启动LoginActivity

怎样一次销毁所有activity,前面写过例子

/article/8522779.html

项目结构:



核心代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: