一.本地广播

2.1 基本概念

  由于之前的广播都是全局的,所有应用程序都可以接收到,这样就很容易会引起安全性的问题,比如说我们发送一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。

  为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自应用程序发出的广播,这样所有的安全性问题就都不存在了。

2.2 核心用法

  使用LocalBroadcastManager来管理广播:

  1. 调用LocalBroadcastManager.getInstance()来获得实例
  2. 调用xx.registerReceiver()来注册广播
  3. 调用xx.sendBroadcast()发送广播
  4. 调用xx.unregisterReceiver()取消注册

2.3 注意事项

  1. 本地广播无法通过静态注册来接收,相比起系统全局广播更加高效
  2. 在广播中启动activity的话,需要为intent加入FLAG_ACTIVITY_NEW_TASK的标记,不然会报错,因为需要一个栈来存放新打开的activity。
  3. 广播中弹出AlertDialog的话,需要设置对话框的类型为:TYPE_SYSTEM_ALERT不然是无法弹出的。

二.代码之旅

  使用一个LocalBroadcastManager来对广播进行管理,并提供了发送广播和注册广播的接收器的方法,代码如下所示:

package com.nyl.orderlybroadcast;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends Activity implements View.OnClickListener { private Button btnOrderlyBroadcast;
private IntentFilter intentFilter;
private LocalReceiver localReceiver;
private LocalBroadcastManager localBroadcastManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
btnOrderlyBroadcast = (Button) findViewById(R.id.btnOrderlyBroadcast);
btnOrderlyBroadcast.setOnClickListener(this);
} @Override
public void onClick(View view) {
Intent intent = new Intent("com.nyl.orderlybroadcast.AnotherBroadcastReceiver");
//发送本地广播
localBroadcastManager.sendBroadcast(intent); intentFilter = new IntentFilter();
intentFilter.addAction("com.nyl.orderlybroadcast.AnotherBroadcastReceiver");
localReceiver = new LocalReceiver();
//注册本地接收器
localBroadcastManager.registerReceiver(localReceiver,intentFilter);
} @Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(localReceiver);
} private class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"收到本地广播",Toast.LENGTH_SHORT).show();
}
}
}

  运行效果如下图:

  

  好了,广播接收器的内容已经学完了,内容不是很多,所以接下来综合运用一下本章中所学到的知识来做一个强制下线的功能~~~~

Android学习总结(七)———— 本地广播的更多相关文章

  1. 八、Android学习第七天——XML文件解析方法(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...

  2. 【Android】完善Android学习(七:API 4.0.3)

    备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...

  3. Android学习探索之本地原生渲染 LaTeX数据公式

    前言: 一直致力于为公司寻找更加高效的解决方案,作为一款K12在线教育App,功能中难免会有LaTeX数学公式的显示需求,这部分公司已经实现了此功能,只是个人觉得在体验和效率上还是不太好,今天来聊一下 ...

  4. Android学习笔记BroadcastReceiver(广播接收者)

    Android发送广播的过程 代码实现 MainActivity.java import androidx.appcompat.app.AppCompatActivity; import androi ...

  5. android 学习随笔七(网络:图片及文本传输及线程关系 )

    主线程.子线程.UI的关系 简单的HTTP请求 -------------------------------------------------------- public class MainAc ...

  6. android学习笔记七——控件(DatePicker、TimePicker、ProgressBar)

    DatePicker.TimePicker ==> DatePicker,用于选择日期 TimePicker,用于选择时间 两者均派生与FrameLayout,两者在FrameLayout的基础 ...

  7. Android学习笔记七:五大存储

    在Android中,可供选择的存储方式有SharedPreferences.文件存储.SQLite数据库方式.内容提供器(Content provider)和网络. 一.SharedPreferenc ...

  8. Android学习(七) Android实现计算器

    前台页面代码,通过线性布局方式实现计算器页面:如图所示 color.xml,自定义颜色values: <?xml version="1.0" encoding="u ...

  9. Android学习总结——本地广播机制

    为了简单解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能在程序的内部进行传递,只能接受来自本应用程序发出的广播.否则当我们发送一些携带关键数据的广播可能被截获,一 ...

随机推荐

  1. bzoj5102

    $贪心$ $按左端点排序.$ $当我们钦定了最右的左端点,那么自然希望右端点尽量靠右$ $考虑之前的区间,那么我们相当于选之前的区间中第k大的右端点$ $堆维护一下就可以了,每次把新的元素放进堆,如果 ...

  2. JAVA 反射机制 获得 private 变量

    public class Triangle { // 定义三角形的三边 protected long lborderA = 0; protected long lborderB = 0; protec ...

  3. python模块datetime

    1. 日期输出格式化 datetime => string import datetime now = datetime.datetime.now() now.strftime('%Y-%m-% ...

  4. Eclipse如何查看接口实现类快捷键

    1.找到要打开的接口类 2.双击接口名选中 3.按Ctrl+T打开接口实现类 以List接口为例,如下所示

  5. Android studio 集成 Genymotion

    这学期刚学android,q其内置的模拟器一开起来电脑实在卡的不要不要的了.查了一下可以在studio中集成genymotion模拟器.各方面百度最后总结了几点. 要在studio中集成genymot ...

  6. 【转】NET中管理数字证书(Digital Certificate)的一些类

    http://blog.csdn.net/bat800/article/details/2314510 http://blog.csdn.net/zjlovety/article/details/72 ...

  7. LeetCode: 463 Island Perimeter(easy)

    题目: You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 repr ...

  8. 使用pip安装第三方插件

    1. 下载Settools和pip,并安装 a. 下载地址: setuptools : https://pypi.python.org/pypi/setuptools#downloadspip: ht ...

  9. E20181001-ts

    decorate vt. 装饰; 点缀; 粉刷; 授予(某人)勋章  vi. 装饰; 布置;

  10. 给定一个数字n,生成n对可能的小括号组合

    示例: 输入:n为3 输出:[ "((()))", "(()())" "(())()", "()(())", " ...