广播的最佳实践---实现强制下线功能

2024-01-27 21:20

本文主要是介绍广播的最佳实践---实现强制下线功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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;@Overrideprotected void onCreate( Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityCollector.addActivity(this);}//注册ForceOfflineReceiver广播接收器@Overrideprotected void onResume() {super.onResume();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice.FORCE_OFFLINE");receiver = new ForceOffLineReceiver();registerReceiver(receiver,intentFilter);}@Overrideprotected void onPause() {super.onPause();if (receiver!=null){unregisterReceiver(receiver);receiver = null;}}@Overrideprotected void onDestroy() {super.onDestroy();ActivityCollector.removeActivity(this);}private class ForceOffLineReceiver extends BroadcastReceiver {@Overridepublic 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() {@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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 {@Overrideprotected 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() {@Overridepublic 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>

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

这篇关于广播的最佳实践---实现强制下线功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651524

相关文章

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.