/**
 * 由于系统的全局广播可以被任何应用程序接收到,并且我们也可以接收来自任何程序的广播
 * 这样很容易引起安全问题,因此Google引入的本地广播LocalBroadcastManager
 */

public class MainActivity extends AppCompatActivity {private Button                mBtnSend;private LocalBroadcastManager mLocalBroadcastManager;private MyReceiver            myReceiver;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBtnSend = (Button) findViewById(R.id.btn_send_broadcast);//1.获取 LocalBroadcastManager实例对象
        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);mBtnSend.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {// 2.使用Intent传递数据给广播接收器
                Intent intent = new Intent("我给你发一条广播,注意接收!");//3.发送本地广播
                mLocalBroadcastManager.sendBroadcast(intent);}});/**
         * 接下来就类似于动态注册广播的方式
         */

        //4.创建IntentFilter对象
        IntentFilter intentFilter = new IntentFilter();//5.添加action(也就是广播接收器想要监听什么广播)
        intentFilter.addAction("我给你发一条广播,注意接收!");//6.创建广播接受器的实例对象

        myReceiver = new MyReceiver();//7.注册本地广播监听器
        mLocalBroadcastManager.registerReceiver(myReceiver, intentFilter);}@Override
    protected void onDestroy() {super.onDestroy();//8.在Activity销毁的时候取消注册广播接受器
        mLocalBroadcastManager.unregisterReceiver(myReceiver);}/**
     * 创建广播接收器
     */
    class MyReceiver extends BroadcastReceiver {//当广播到来的手onReceive方法就会得到执行,具体的逻辑就在这个方法里处理
        @Override
        public void onReceive(Context context, Intent intent) {Toast.makeText(MainActivity.this, "广播接收器接收到广播了!", Toast.LENGTH_SHORT).show();}}
}
做一个简单的案例:每次点击按钮的时候发送本地广播,当系统接收到广播后,自动跳转界面
MainActivity:
SecondActivity:
ThirdActivity:
MyBroadcastReceiver(广播接收器):
public class MyBroadcastReceiver extends BroadcastReceiver {@Override
    public void onReceive(Context context, Intent intent) {//当广播到来的手onReceive方法就会得到执行,具体的逻辑就在这个方法里处理
        if (intent.getAction().equals("this is a broadcast from 
        the second activity")) {Intent i = new Intent(context, ThirdActivity.class);i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//跳转到第三个Activity
            context.startActivity(i);} else if (intent.getAction().equals("this is a broadcast from 
        the third activity")) {Intent i = new Intent(context, MainActivity.class);i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//跳转到第三个Activity
            context.startActivity(i);}}
}
public class ThirdActivity extends AppCompatActivity {private LocalBroadcastManager mLocalBroadcastManager;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_third);mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);}public void third(View view) {//使用Intent传递数据给广播接收器
        Intent intent = new Intent("this is a broadcast from 
      the third activity");//发送本地广播
        mLocalBroadcastManager.sendBroadcast(intent);}
}
public class SecondActivity extends AppCompatActivity {private LocalBroadcastManager mLocalBroadcastManager;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);}public void second(View view) {//使用Intent传递数据给广播接收器
        Intent intent = new Intent("this is a broadcast from 
      the second activity");//发送本地广播
        mLocalBroadcastManager.sendBroadcast(intent);}
}
public class MainActivity extends AppCompatActivity {private LocalBroadcastManager mLocalBroadcastManager;private MyBroadcastReceiver mReceiver;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initBroadcast();}private void initBroadcast() {//1.获取LocalBroadcastManager实例对象
        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);//2.创建IntentFilter对象
        IntentFilter intentFilter = new IntentFilter();//3.添加Action(也就是广播接收器需要接收的广播)
        intentFilter.addAction("this is a broadcast from the second activity");intentFilter.addAction("this is a broadcast from the third activity");//4.创建广播接收器实例对象
        mReceiver = new MyBroadcastReceiver();//5.注册广播
        mLocalBroadcastManager.registerReceiver(mReceiver, intentFilter);}public void first(View view) {Intent intent = new Intent(this, SecondActivity.class);startActivity(intent);}@Override
    protected void onDestroy() {super.onDestroy();//6.在Activity销毁的时候取消注册广播接受器
        mLocalBroadcastManager.unregisterReceiver(mReceiver);}
}

本地广播LocalBroadcastManager简单使用相关推荐

  1. Android复习12【广播接收者-BroadcastReceiver(简单案例-发送广播、静态注册、动态注册、本地广播、代码示例(别处登陆踢用户下线)、常用系统广播总结、音乐播放器)】

    2020-04-28[11周-周二] 音乐播放器Android代码下载:https://wws.lanzous.com/ifqzihaxvij 目   录 简单案例-发送广播 2)动态注册实例(监听网 ...

  2. Android LocalBroadcast 本地广播源码解析

    前言: Android 本地广播实现非常简单,就一个类.android.support.v4.content.LocalBroadcastManager 大概200行代码.我们看下关键的几个地方 注册 ...

  3. 强制下线 使用本地广播

    强制下线功能:实现强制下线的功能思路比较简单,只需要收到异地登陆发出的广播,弹出一个对话 框,让用户无法进行交互,用户必须要点击确定按钮,重新登陆. -在点击按钮的处理逻辑中,销毁掉所有的活动,并重新 ...

  4. Android入门(11)| 全局广播与本地广播

    文章目录 广播概念 接收广播 动态注册 实例 静态注册 实例 发送广播 发送标准广播 广播的跨进程特性 发送有序广播 本地广播 广播概念 Android 中的每个应用程序都可以对自己感兴趣的广播进行注 ...

  5. C# socket编程实践——支持广播的简单socket服务器

    在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...

  6. Android 进程常驻(5)----开机广播的简单守护以及总结

    这是一个轻量级的库,配置几行代码.就能够实如今android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下.clean master获取root权限下都无法杀死进程 支持系统2.3到 ...

  7. Android 系统(270)---开机广播的简单守护以及总结

    Android 进程常驻(5)----开机广播的简单守护以及总结 这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clea ...

  8. 钉钉 6.0 开放底层“协同框架” 开发多人实时协作程序像编本地程序一样简单...

    2021 年新年伊始,钉钉在 1 月 14 日发布了最新 6.0 版本,同时宣布战略定位全面升级,钉钉将从过去基于IM的协同办公平台,升级为企业协同办公和应用开发平台. 从产品和市场表现,钉钉已经杀出 ...

  9. 构建本地缓存java_Java8简单的本地缓存实现

    这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在key为Null的时候自动计算一个新的value值.非常适合实现cache. ...

最新文章

  1. php,http_build_query,乱码
  2. Laravel 5.5 的错误异常处理机制以及应用实例
  3. linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库
  4. C语言程序练习-L1-003 个位数统计 (15分)
  5. oracle锁表怎么解决,Oracle锁表问题的简捷处理技巧
  6. 双网卡主机配置oracle监听,VirtualBox设置双网卡实现虚机上网及主宿机互访
  7. java中得到classpath和当前类的绝对路径的一些方法(路径中的%20进行替换空格)...
  8. 使用durid的ConfigFilter对数据库密码加密
  9. c语言程序设计语言描述,C语言程序设计题目描述(详).txt
  10. 模型秒变API只需一行代码,支持TensorFlow等框架
  11. 中文乱码之springboot框架中两工程之间参数传递乱码
  12. 12-畅通工程续(多种方法求最短路径)
  13. C盘\用户目录下\管理员文件夹 如何重命名?
  14. 暗黑破坏神(DIABLOII 1.11B)BOT 及源代码公开下载
  15. php查重,知网查重时检测php之类的源码吗?【干货分享】
  16. Kubernetes能成大事,华为云的眼光“真毒”
  17. excel导出图片---HSSFWorkbook--SXSSFWorkbook
  18. 考虑蒙特卡洛考虑风光不确定性的配电网运行风险 评估 由于风电光伏出力的不确定性,造成配电网运行风险,运用蒙特卡洛概率潮流计算分析电压和线路支路越限
  19. Fast Affine Template Matching over Galois Field仿射模板匹配数据测试问题
  20. Google Chart API学习(二)

热门文章

  1. struts2配置默认Action
  2. PowerDesigner的學習
  3. QuickWAP实现网页跳转
  4. node版本管理和npm源管理工具
  5. 拼多多332亿美金市值超网易,黄铮离目标又近了一步!
  6. vsftpd更新和修改版本号教程
  7. 敏捷世界里中层经理的角色
  8. 电话拦截以及电话拦截后的提示音
  9. Arquillian和Jboss的版本问题
  10. hue 安装 + authrization manager安装