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>
    

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

  • 相关阅读:
    [Codeforces809D] Hitchhiking in the Baltic States
    [Codeforces1148H] Holy Diver
    [PKUWC2018]猎人杀
    [Codeforces566C] Logistical Questions
    越野赛车问题
    Suffix Array
    第05组(65) 需求分析报告
    第05组(65) 团队展示
    第三次作业
    结对编程作业
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11782004.html
Copyright © 2011-2022 走看看