Android 本地广播和强制下线功能的实现代码

一、使用本地广播

1.本地广播一个举例

package com.example.broadcasttest2;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

 private IntentFilter intentFilter;

 private LocalReceiver localReceiver;

 private LocalBroadcastManager localBroadcastManager;

 private NetworkChangeReceiver networkChangeReceiver;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 intentFilter = new IntentFilter();
 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
 networkChangeReceiver = new NetworkChangeReceiver();
 registerReceiver(networkChangeReceiver,intentFilter);
 localBroadcastManager = LocalBroadcastManager.getInstance(this);//获取实例

 Button button = (Button) findViewById(R.id.button);
 button.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  //下面这行代码是用来全局广播的
//  Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
  //下面这行代码是用来本地广播的(也就是app内部传递广播)
  Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
  localBroadcastManager.sendBroadcast(intent);//发送本地广播
//  sendBroadcast(intent);
  //我们关闭上面一行代码,然后写另一种方法sendOrderedBroadcast,发送有序广播
  sendOrderedBroadcast(intent,null);
  }
 });
 intentFilter = new IntentFilter();
 intentFilter.addAction("com.example.broadcasttest.LOCAL_BROACAST");
 localReceiver = new LocalReceiver();
 localBroadcastManager.registerReceiver(localReceiver,intentFilter);//注册本地广播监听器

 }

 @Override
 protected void onDestroy() {
 super.onDestroy();
// unregisterReceiver(networkChangeReceiver);
 localBroadcastManager.unregisterRecerver(localReceiver);

 }

 class NetworkChangeReceiver extends BroadcastReceiver{
 @Override
 public void onReceive(Context context,Intent intent) {
  ConnectivityManager connectionMananger = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo networkInfo = connectionMananger.getActiveNetworkInfo();
  if(networkInfo != null && networkInfo.isAvailable()) {
  Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
  } else {
  Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
  }

 }
 }

 class LocalReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context,Intent intent) {
  Toast.makeText(context,"received local broadcast",Toast.LENGTH_SHORT).show();
 }
 }
}

通过LocalBroadcastManagergetInstance()方法来获取一个实例,注册广播是用的registerReceiver()方法,传入的参数一个是localReceiver的内部实例,一个是IntentFilter实例。最后在onCreate方法中调用发送广播的方法。最后我们在按钮的点击事件里面发送一条com.example.broadcasttest.LOCAL_BROADCAST广播,然后在LocalReceiver里面去接收这条广播。

注意点:本地广播是无法通过静态注册的方式来接收的,其实这也完全可以理解,因为静态注册主要就是为了让程序在未启动的时候也能收到广播,而发送本地广播的时候,我们的程序就已经启动了,因为也完全不需要使用静态注册的功能。

2.使用本地广播的优势

(1)程序内部传递,防止机密数据泄露;
(2)其他程序无法将广播发送到我们的程序内部,防止安全漏洞的隐患;
(3)发送本地广播更加高效。

二、实现强制下线功能

1.实现强制下线的逻辑

无论在我们在程序的哪个活动界面,一旦收到强制下线的广播,就跳出来一个界面,必须点击“确认“,然后直接跳转到登录界面。

2.首先创建一个类用于管理所有的活动

package com.example.broadcastbestpractice;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;

public class ActivityCollector {

 public static List<Activity> activities = new ArrayList<Activity>();

 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();
  }
 }
 }
}

3.创建一个基类BaseActivity作为所有活动的父类

package com.example.broadcastbestpractice;

import android.app.Activity;
import android.os.Bundle;

public class BastActivity extends Activity {
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 ActivityCollector.addActivity(this);
 }

 @Override
 public void onDestroy() {
 super.onDestroy();
 ActivityCollector.removeActivity(this);
 }
}

4.接着需要建立一个登录页面的布局

<?xml version="1.0" encoding="utf-8"?>
<!--
 android:shrinkColumns设置允许被收缩的列序号
 android:strectColumns设置允许被拉伸的列序号 -->
<TableLLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:strectColumns = "1" >

  <TableRow>
    <TextView
      android:layout_height = "wrap_content"
      android:text="Account:" />

    <EditText
      android:id="@+id/account"
      android:layout_height="wrap_content"
      android:hint="Input your account" />
  </TableRow>

  <TableRow>
    <TextView
      android:layout_height="wrap_content"
      android:text="Password:" />

    <EditTest
      android:id="@+id/password"
      android:layout_height="wrap_content"
      android:inputType="textPassword" />
  </TableRow>

  <TableRow>
    <Button
      android:id="@+id/login"
      android:layout_height="wrap_content"
      android:layout_span="2"
      android:text="Login" />
  </TableRow>

</TableLayout>

后面的我们下次连载接着写。

三、源码:

BroadcastTest2
BroadcastBestPractice
https://github.com/ruigege66/Android/tree/master/BroadcastTest2
https://github.com/ruigege66/Android/tree/master/BroadcastBestPractice
CSDN:https://blog.csdn.net/weixin_44630050

到此这篇关于Android 本地广播和强制下线功能的实现代码的文章就介绍到这了,更多相关Android 本地广播和强制下线内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android学习之本地广播使用方法详解

    本地广播信息只能在应用程序内部传递,同时广播接收器也只能接收应用程序内部的广播消息. MainActivity代码 package com.example.luobo.mybroadcastreceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; imp

  • Android模拟强制下线通知功能实例代码

    package com.itheima74.broadcastbestpractice; import android.content.Intent; import android.os.Bundle; import android.os.SystemClock; import android.support.v4.content.LocalBroadcastManager; import android.view.View; /** * 模拟强制下线通知 * 1.登录成功后10秒发送一条本地自

  • Android运用BroadcastReceiver实现强制下线

    思路:首先进入登录界面,输入账号和密码后登陆到主界面,在主界面通过点击按钮发送一条强制下线的广播,广播接收者收到广播后重新进入登陆界面. 新建项目Broadcast03.强制下线功能需要先关闭所有的活动,然后返回到登录界面.所以先创建一个ActivityCollector类用来管理所有的活动: public class ActivityCollector { public static List<Activity> activities = new ArrayList<Activity&

  • Android使用广播(BroadCast)实现强制下线的方法

    本文实例讲述了Android使用广播(BroadCast)实现强制下线的方法.分享给大家供大家参考,具体如下: 使用广播简单模拟强制下线功能. 1.新建活动管理类 新建Activity活动管理类,方便管理所有活动. package com.example.broadcastpractice; import java.util.ArrayList; import java.util.List; import android.app.Activity; /** * 所有活动管理器 * @author

  • Android强制下线功能实现的代码示例

    强制下线的应用场景很多, 比如我们好多账号都有抢登的显现, 会被挤下线. 详细实现: 其实实现强制下线功能的思路也比较简单, 只需要在界面弹出一个对话框, 让用户无法进行其他操作, 必须点击对话框中的确定按钮, 然后回到登录界面即可. 但是又有一个问题, 我们通知用户强制下线, 用户可能正处于任何一个界面, 难道需要在每个界面上都编写一个弹出对话框的逻辑? 当然不是! 我们可以借助本章中所学的广播知识来轻松实现这一功能. public class ActivityConllector { pub

  • Android 本地广播和强制下线功能的实现代码

    一.使用本地广播 1.本地广播一个举例 package com.example.broadcasttest2; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Conn

  • Android实现强制下线功能的示例代码

    一.回顾 上次连载写了两个类,一个类ActivityCollector.java用于管理所有的活动:一个类是BaseActivity.java作为所有活动的父类: 还有一个放在layout目录中的登录界面login.xml 二.登录页面的活动 接下来写一个登录页面的活动,继承自BaseActivity.java package com.example.broadcastbestpractice; import android.content.Intent; import android.os.B

  • 微信web端后退强制刷新功能的实现代码

    具体代码如下所示: <script> //生成uuid var uuidChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); function uuid() { var r; var uuid = []; uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-"; uuid[14] =

  • Android仿微信右滑返回功能的实例代码

    先上效果图,如下: 先分析一下功能的主要技术点,右滑即手势判断,当滑到一直距离时才执行返回,并且手指按下的位置是在屏幕的最左边(这个也是有一定范围的),  这些可以实现onTouchEvent来实现. 接着就是返回时,有滑动效果,很显然这个是Acitivty切换动画实现的.好啦,分析完了就开干.下面上代码: @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case Mot

  • Android中使用ShareSDK集成分享功能的实例代码

    引言 现在APP开发集成分享功能已经是非常普遍的需求了.其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑.好了,下面切入正题正式开始介绍. 1.ShareSDK开发包及配置 这个不用多说,去他们官网看找SDK开发包和集成文档即可. Android版本地址:http://www.mob.com/downloadDetail/ShareSDK/android. 注意:记得要注册ShareSDK账号获取AppKey哦.这些

  • Android加载loading对话框的功能及实例代码(不退出沉浸式效果)

    一.自定义Dialog 在沉浸式效果下,当界面弹出对话框时,对话框将获取到焦点,这将导致界面退出沉浸式效果,那么是不是能通过屏蔽对话框获取焦点来达到不退出沉浸式的目的呢.说干就干,我们先来看一下改善后的效果图. 普通对话框弹出效果 LoadingDialog弹出效果 自定义LoadingDialog public class LoadingDialog extends Dialog { public LoadingDialog(Context context) { super(context);

  • Android 选择相册照片并返回功能的实现代码

    首先由于进行读写操作,要在 AndroidManifest.xml中声明权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 调用系统相册: private static final in

  • Android 中TeaPickerView数据级联选择器功能的实例代码

    Github地址 YangsBryant/TeaPickerView (Github排版比较好,建议进入这里查看详情,如果觉得好,点个star吧!) 引入module allprojects { repositories { google() jcenter() maven { url 'https://www.jitpack.io' } } } implementation 'com.github.YangsBryant:TeaPickerView:1.0.2' 主要代码 public cla

随机推荐