zoukankan      html  css  js  c++  java
  • 广播的最佳实践---实现强制下线功能

    思路:只需要在界面上弹出一个对话框,让用户无法进行任何其他操作,必须点击对话框的确定按钮,然后登录到登录界面即可.

    ActivityCollector.java
    管理所有活动

    package com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice;
    
    import android.app.Activity;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author 王德强
     * 功能 : 管理所有的活动
     * 强制下线功能需要关闭所有的活动,然后回到登录界面
     */
    
    public class ActivityCollector {
        public static List<Activity> activities = new ArrayList<>();
        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();
                }
            }
        }
    }
    

    BaseActivity.java
    作为所有活动的父类

    package com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice;
    
    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.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    
    /**
     * Created by Deligence on 2017/5/24.
     * @author 王德强
     * 功能:作为所有活动的父类
     */
    
    public class BaseActivity extends AppCompatActivity {
        //动态注册一个广播接收器
        private ForceOffLineReceiver receiver;
        @Override
        protected void onCreate( Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityCollector.addActivity(this);
        }
    
        //注册ForceOfflineReceiver广播接收器
        @Override
        protected void onResume() {
            super.onResume();
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice.FORCE_OFFLINE");
            receiver = new ForceOffLineReceiver();
            registerReceiver(receiver,intentFilter);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            if (receiver!=null){
                unregisterReceiver(receiver);
                receiver = null;
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ActivityCollector.removeActivity(this);
        }
    
    
        private class ForceOffLineReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(final Context context, final Intent intent) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setTitle("Warning");
                builder.setMessage("You are forced to be offline,Please try to login again");
                builder.setCancelable(false);
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCollector.finishAll();//销毁所有活动
                        Intent intent1 = new Intent(context,LoginActivity.class);
                        context.startActivity(intent1);//重启LoginActivity活动
                    }
                });
                builder.show();
            }
        }
    }
    

    LoginActivity.java
    登录模块

    package com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import com.wangdeqiang.www.chatwithrobot.R;
    
    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 View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String account = accountEdit.getText().toString();
                    String password = passwordEdit.getText().toString();
                    //如果账户是admin密码是123456 则认为登陆成功
                    if(account.equals("admin") && password.equals("123456")){
                        Intent intent = new Intent(LoginActivity.this,Main3Activity.class);
                        startActivity(intent);
                        finish();
                    }else {
                        Toast.makeText(LoginActivity.this,"a account or a password is invalid",Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }
    

    activity_login.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="horizontal">
    
            <TextView
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:text="Account:"
                android:textSize="18sp" />
    
            <EditText
                android:id="@+id/account"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="horizontal">
    
            <TextView
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:text="Password"
                android:textSize="18sp" />
    
            <EditText
                android:id="@+id/password"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:inputType="textPassword" />
        </LinearLayout>
    
        <Button
            android:id="@+id/login"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:text="Login" />
    
    </LinearLayout>
    

    运行界面如下图所示
    这里写图片描述

    Main3Activity.java

    package com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    import com.wangdeqiang.www.chatwithrobot.R;
    
    public class Main3Activity extends BaseActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main3);
            Button forceOffLine = (Button) findViewById(R.id.force_offonline);
            forceOffLine.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent("com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice.FORCE_OFFLINE");
                    sendBroadcast(intent);
                }
            });
        }
    }
    

    activity_main3.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice.Main3Activity">
    <Button
        android:id="@+id/force_offonline"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Send force offline broadcast"
        />
    </android.support.constraint.ConstraintLayout>
    

    运行图如图所示
    这里写图片描述

  • 相关阅读:
    LintCode Python 简单级题目 488.快乐数
    LintCode Python 简单级题目 100.删除排序数组中的重复数字 101.删除排序数组中的重复数字II
    LintCode Python 简单级题目 373.奇偶分割数组
    LintCode Python 简单级题目 39.恢复旋转排序数组
    LintCode Python 简单级题目 35.翻转链表
    LintCode Python 简单级题目 451.两两交换链表中的节点
    LintCode Python 简单级题目 174.删除链表中倒数第n个节点
    aws查看官方centos镜像imageid
    linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计
    php配置优化-生产环境应用版
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11782005.html
Copyright © 2011-2022 走看看