博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
强制下线功能
阅读量:4478 次
发布时间:2019-06-08

本文共 5056 字,大约阅读时间需要 16 分钟。

有需要可以去 https://github.com/L0ngD3/BroadcastBestPractice.git 下载

 

1.首先创建一个类用来管理所有的活动。

1 public class ActivityCollector { 2     public static List
activities = new ArrayList<>(); 3 public static void addActivity(Activity activity){ 4 activities.add(activity); 5 } 6 public static void removeActivity(Activity activity){ 7 activities.remove(activity); 8 } 9 public static void finishAll(){10 for (Activity activity : activities){11 if (!activity.isFinishing()){12 activity.finish();13 }14 }15 }16 }

2.创建一个类作为活动的父类

public class BaseActivity extends AppCompatActivity {    private ForceOffLine receive;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ActivityCollector.addActivity(this);    }protected void onDestroy() {        super.onDestroy();        ActivityCollector.removeActivity(this);       }}

3.创建登录的布局

1 
5
8
15
23
24 25
28
34
41
42
49

4.创建一个类用来判断登录

public class LoginActivity extends BaseActivity {    EditText password;    EditText account;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_lohin);       //找到控件       account = (EditText) findViewById(R.id.account);       password = (EditText) findViewById(R.id.password);       Button login = (Button) findViewById(R.id.login);        //登录        login.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {               String admin= account.getText().toString().trim();               String pwd= password.getText().toString().trim();                if (admin.equals("")||pwd.equals("")){                    Toast.makeText(getApplicationContext(),"帐号或者密码为空",Toast.LENGTH_SHORT).show();                }else if (admin.equals("admin")&&pwd.equals("123456")){                    //实现跳转  在登录界面跳转到主函数上去  你可以将MainActivity理解为登录后的界面                    Intent intent = new Intent(LoginActivity.this,MainActivity.class);                    startActivity(intent);                }else {                    Toast.makeText(getApplicationContext(),"帐号或者密码错误",Toast.LENGTH_SHORT).show();                }            }        });    }

5.在main布局中设置一个点击按钮,点击后就会跳转到登录界面

 6.实现跳转就是发送了一条广播,所以我们创建广播接收器来接收这条广播,实现跳转,并且弹出对话框给出提示。修改BaseActivity类

1 public class BaseActivity extends AppCompatActivity { 2     private ForceOffLine receive; 3     @Override 4     protected void onCreate(@Nullable Bundle savedInstanceState) { 5         super.onCreate(savedInstanceState); 6         ActivityCollector.addActivity(this); 7     } 8  9 //注册活动10     protected void onResume() {11         super.onResume();12         //广播13         IntentFilter intentFilter = new IntentFilter();         //添加我们所需要的广播14         intentFilter.addAction("com.example.a13522.xiaxian.FORCE_OFFLINE");15         receive = new ForceOffLine();16         registerReceiver(receive,intentFilter);17 18     }19     protected void onPause() {20         super.onPause();21         if (receive!=null){22             unregisterReceiver(receive);23             receive = null;24         }25     }26 //取消27     protected void onDestroy() {28         super.onDestroy();29         ActivityCollector.removeActivity(this);30     }31 32 33     //定义广播34     class ForceOffLine extends BroadcastReceiver{35         public void onReceive(final Context context, final Intent intent) {
          //实现tan框的功能36 AlertDialog.Builder builder = new AlertDialog.Builder(context);37 builder.setTitle("警告");38 builder.setMessage("你的账户多地登录,请修改密码重新登录");39 builder.setCancelable(false);//false表示不可取消           //创建点击按钮事件40 builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {41 @Override42 public void onClick(DialogInterface dialog, int which) {43 ActivityCollector.finishAll();//销毁所有活动44 //从此界面跳转到登录界面45 Intent intent= new Intent(context,LoginActivity.class);46 //重新启动活动47 context.startActivity(intent);48 }49 });50 builder.show();51 }52 }53 }

最后在清单文件中设置主布局

1 
3 4
11
12
13
14
15
16
17
18
19
20 21

 执行过程:首先启动onCreate()和onResume()方法  创建活动和发送一条广播

点击按钮后:执行onPause(),取消一下,因为广播发送后必须取消一下。

在调用onCreate()和onResume()方法  创建活动和发送一条广播。点击下线并且点击了ok

先调用onPause(),,取消一下上一步创建活动和发送一条广播。

2.调用onCreate()和onResume()方法  创建活动和发送一条广播

3.调用onDestroy()因为点击ok后销毁所有活动,销毁后它跳转到登录界面重新创建一个活动

转载于:https://www.cnblogs.com/lyl123/p/7160860.html

你可能感兴趣的文章
[C#]C#学习笔记-CIL和动态程序集
查看>>
[Effective C# 4.0 译] 条款21:限定类型的可见性
查看>>
离散化
查看>>
leetcode 23. Merge k Sorted Lists(堆||分治法)
查看>>
用C++建立一个窗口
查看>>
第二百八十八天 how can I坚持
查看>>
在mac上安装ruby
查看>>
javascript 开发规范
查看>>
同一服务器上安装多个tomcat
查看>>
提交JSON修改数据
查看>>
用户体验评价
查看>>
HDU 3432
查看>>
Android 编程下将 Bitmap 转为 InputStream
查看>>
JS 检测中文字符的正则表达式
查看>>
第一次使用接口 --ReportViewer改变显示语言
查看>>
Average of Levels in Binary Tree
查看>>
数组基本
查看>>
从营销角度看kik的成功
查看>>
SQLserver分页查询实例
查看>>
【solr基础教程之二】索引
查看>>