Android通过广播实现强制下线功能

我们首先定义一个activity集合类,在这个类里面主要添加三个方法,分别是

1.添加activity

2.删除activity

3.关闭所有activity

如下图:

package cn.xiayiye.forceoff_line;import android.app.Activity;import java.util.ArrayList;
import java.util.List;/*** 创 建 者:下一页5(轻飞扬)* 创建时间:2018/2/28.11:05* 个人小站:http://wap.yhsh.ai(已挂)* 最新小站:http://www.iyhsh.icoc.in* 联系作者:企鹅 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 空间名称:XiaYiYeMap* 项目包名:cn.xiayiye.forceoff_line*/
class ActivityCollector {private static List<Activity> activities = new ArrayList<>();//存放activity的集合//添加activitystatic void addActivity(Activity acy) {activities.add(acy);}//移除activitystatic void removeActivity(Activity acy) {activities.remove(acy);}//销毁所有activitystatic void finishAll() {for (Activity activity : activities) {if (!activity.isFinishing()) {activity.finish();//关闭所有activity}}}
}

2.我们在写一个baseactivity,让所有的activity继承activity,然后在baseactivity里面调用添加activity和关闭所有activity的方法即可:

package cn.xiayiye.forceoff_line;import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;/*** 创 建 者:下一页5(轻飞扬)* 创建时间:2018/2/28.11:10* 个人小站:http://wap.yhsh.ai(已挂)* 最新小站:http://www.iyhsh.icoc.in* 联系作者:企鹅 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 空间名称:XiaYiYeMap* 项目包名:cn.xiayiye.forceoff_line*/
public class BaseActivity extends Activity {private Off_LineReceiver off_lineReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (savedInstanceState != null) {String save = savedInstanceState.getString("save");Log.e("打印保存后取出的信息", save);}//添加所有活动页面ActivityCollector.addActivity(this);}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("save", "要保存的信息");}@Overrideprotected void onDestroy() {super.onDestroy();ActivityCollector.removeActivity(this);//移除所有活动页面}@Overrideprotected void onResume() {super.onResume();IntentFilter intentFilter = new IntentFilter("com.yhsh.off-line");off_lineReceiver = new Off_LineReceiver();registerReceiver(off_lineReceiver, intentFilter);//注册广播}@Overrideprotected void onPause() {super.onPause();if (off_lineReceiver != null) {unregisterReceiver(off_lineReceiver);//解绑广播off_lineReceiver = null;}}class Off_LineReceiver extends BroadcastReceiver {@Overridepublic void onReceive(final Context context, Intent intent) {Log.e("打印动作:", intent.getAction());if ("com.yhsh.off-line".equals(intent.getAction())) {//弹框强制下线AlertDialog.Builder alert = new AlertDialog.Builder(context);alert.setCancelable(false);//点击对话框以外不取消对话框alert.setTitle("警告").setMessage("你已被强制下线").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//关闭所有的activity,直接进入登录页面ActivityCollector.finishAll();startActivity(new Intent(context, LoginActivity.class));//通过下面的一个属性会让页面跳转之间无任何动画效果
//                        overridePendingTransition(0, 0);}}).show();//显示对话框}}}
}

然后我们先写一个简单的登录页面:

当账号密码正确方可进入主页面

package cn.xiayiye.forceoff_line;import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class LoginActivity extends BaseActivity implements View.OnClickListener {private EditText et_act;private EditText et_pwd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);et_act = (EditText) findViewById(R.id.et_act);et_pwd = (EditText) findViewById(R.id.et_pwd);Button bt_login = (Button) findViewById(R.id.bt_login);bt_login.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt_login:login();break;}}private void login() {String trim_act = et_act.getText().toString().trim();String trim_pwd = et_pwd.getText().toString().trim();if (!TextUtils.isEmpty(trim_act) && !TextUtils.isEmpty(trim_pwd)) {if (trim_act.equals("admin") && trim_pwd.equals("123456")) {//登录startActivity(new Intent(LoginActivity.this, MainActivity.class));finish();//关闭登录页面} else {Toast.makeText(this, "账号密码不正确!", Toast.LENGTH_SHORT).show();}} else {Toast.makeText(this, "账号密码不能为空!", Toast.LENGTH_SHORT).show();}}
}

3.然后再主页面自定义一个广播,发送给所有activity,当然所有页面都是继承baseactivity的,所以我们只需要在baseactivity里面接受自定义的广播即可实现关闭所有页面个添加所有activity:

package cn.xiayiye.forceoff_line;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button off_line = (Button) findViewById(R.id.off_line);off_line.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//发送强制下线广播Intent intent = new Intent("com.yhsh.off-line");sendBroadcast(intent);}});}
}

通过我们在baseactivity里面接收到自定义的广播来关闭所有activity页面,重新进入到登录页面,这样一来我们就实现了任意页面强制下线功能了。

动态图如下:

如果看以上代码还是不懂得请点击源码:

源码下载

Android通过广播实现强制下线功能相关推荐

  1. android#boardcast#广播实现强制下线功能

    参考自<第一行代码>--郭霖 强制下线功能需要先关闭掉所有的活动(Activity),然后回到登录界面.先创建一个ActivityCollector类用于管理所有的活动,代码如下所示: p ...

  2. Android开发(2) | 广播 Broadcast 的应用——强制下线功能

    文章目录 功能简介 关闭所有活动 登陆界面 发送强制下线的广播 广播接收器 AndroidManifest.xml 运行结果 功能简介 强制下线功能只需要弹出一个对话框,让用户只能点击确定按钮,回到登 ...

  3. android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...

    强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...

  4. Android-浅谈广播机制,实现强制下线功能

    首先,复习一下,什么是广播呢? 顾名思义,广播就像我们上学的时候每个班级里的喇叭一样,这些喇叭都是接入到学校的总的一个地方,比如说广播室啊什么的.一旦有什么通知,就会播放一条让全校师生都知道的广播.类 ...

  5. android仿qq强制下线服务器,qq强制下线(实现一个类似QQ的强制下线功能)

    qq强制下线(实现一个类似QQ的强制下线功能),哪吒游戏网给大家带来详细的qq强制下线(实现一个类似QQ的强制下线功能)介绍,大家可以阅读一下,希望这篇qq强制下线(实现一个类似QQ的强制下线功能)可 ...

  6. Java实现第二次登陆强制下线_Android登陆页面记住密码以及强制下线功能的实现...

    这篇文章主要是巩固一下前面所学的SharedPreferences存储数据以及广播接收器.如果对这两个部分不熟悉的话可以先看一下Android数据存储(二)以及Android广播接收器(二)由于这篇文 ...

  7. 仿QQ异地登录强制下线功能的实现

    一,仿QQ异地登录强制下线功能 效果:同一个账号,最后一个登录的用户会把前一个登录后的用户顶掉,被迫下线! 1,剖析登录原理 登录的后台逻辑 准备一张账户信息表(账号,密码,是否禁用等字段) 查询账号 ...

  8. 广播的最佳实践——实现强制下线功能(Android_Broadcast)...

    关键词:Broadcast, 生命周期,继承 本项目基本思路: 1.先创建一个ActivityCollector类用于管理所有的活动: 2.然后创建一个BaseActivity类作为所有活动的父类: ...

  9. java 强制下线_广播的最佳实践——实现强制下线功能(Android_Broadcast)

    关键词:Broadcast, 生命周期,继承 本项目基本思路: 1.先创建一个ActivityCollector类用于管理所有的活动: 2.然后创建一个BaseActivity类作为所有活动的父类: ...

最新文章

  1. Kafka 顺序消费方案
  2. localstorage的应用,对js进行缓存
  3. python sklearn.neural_network.MLPClassifier() 神经网络改变模型复杂度的四种方法
  4. 电脑雕刻教程_湖南益阳3DMAX建模培训入门教程【仁厚教育】
  5. 三个案例看Nginx配置安全
  6. WPF LibraryBar去背景色
  7. 【转】执行Import-SPWeb报错Import-SPWeb : Requested value 'PublishingPages' was not found
  8. MySQL 性能优化 分布式
  9. CloudIDE插件在手,按时下班不愁
  10. 短视频秒播优化实践(二)
  11. h5商城模板_几个常用H5制作软件、网站推荐
  12. python 设置请求时间间隔_如何自学Python爬虫?新手入门教程
  13. 老K整理|4月|物流技术圈职位招聘合集!
  14. Power BI Desktop 中的数据源
  15. 如何检测浏览器是否安装了Adblock,uBlock Origin,Adguard,uBlock等广告屏蔽插件
  16. 求求你们了,有什么能搞钱的副业
  17. 如何git命令创建一个本地分支,并提交到远程(remote)
  18. C#正则判断手机号 邮箱 网址 日期 IP 身份证等
  19. 《一步一步看源码:Nacos》框架源码系列之一(其1,配置服务源码)
  20. 火山PC_火山视窗0基础入门课程23课

热门文章

  1. 正则表达式_月隐学python第20课
  2. defunct 进程占用端口_UAV心跳机制与容器、进程数据采集
  3. python 文件格式转换_python实现txt文件格式转换为arff格式
  4. android的四种启动模式,(转)彻底弄懂Activity四大启动模式
  5. mysql恢复root用户_恢复MYSQL的root用户
  6. 鼠标的计算机基础知识,2、使用鼠标--电脑基础知识
  7. matlab波形振幅,MATLAB正交振幅调制解调仿真分析(一)
  8. BUUCTF--练习场-- basic--上传文件漏洞经典靶场upload-labs-- Pass1-3(Pass4简单尝试)
  9. HTML5如何添加图片遮罩,带有HTML5画布的putImageData的遮罩?
  10. 升级php影响zabbix吗,zabbix2.0升级到zabbix3.0