前情提要(Previously)

本系列将使用 Android Studio 将《第一行代码》(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Android Studio 作为开发 IDE 的同学开路。
PS:其实我就是现学现卖,希望我能坚持刷完。

系列目录在此:

  • Android Studio 单刷《第一行代码》系列目录

系统广播

Android 内置了很多系统级别的广播,通过监听这些广播可以得到相关的系统状态信息。例如:

  • 系统启动完成
  • 打开、关闭飞行模式
  • 电量低
  • 内存不足
  • 网络变化

动态注册

下面是监听网络变化的例子,新建一个 BroadcastTest 项目。

  • 在 MainActivity 中定义一个内部类继承自 BroadcastingReceiver,代码如下:
class NetworkChangeReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();}
}
  • 在 onCreate() 方法中注册,代码如下:
private IntentFilter intentFilter;
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);
}
  • 在 onDestroy() 方法中取消注册,代码如下:
@Override
protected void onDestroy(){super.onDestroy();unregisterReceiver(networkChangeReceiver);
}
  • OK,运行一下,会发现程序启动时会弹出一个提示;按 Home 回到主界面,并尝试开关网络,会发现有提示弹出。

静态注册

下面是监听系统启动的例子。

  • 在 MainActivity 中新建一个 public 类继承自 BroadcastingReceiver,代码如下:
public class BootCompleteReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "Boot complete", Toast.LENGTH_SHORT).show();}
}
  • 在 AndroidManifest.xml 中静态注册,增加 receiver 代码如下:
<receiver android:name=".MainActivity$BootCompleteReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter>
</receiver>
  • 监听系统开机广播需要权限,在 AndroidManifest.xml 中添加权限声明,代码如下:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
  • OK,运行程序,到设置 → 应用程序里找到我们的 Broadcast,点击打开会看到程序拥有了开机启动的权限。重启机器或模拟器就可以收到开机广播啦。

自定义广播

下面是在程序中发送自定义广播并接收的例子。

  • 在 MainActivity 中新建一个 MyBroadcastReceiver,代码如下:
public static class MyBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();}
}
  • 在 AndroidManifest.xml 中注册,代码如下:
<receiver android:name=".MainActivity$MyBroadcastReceiver"><intent-filter><action android:name="com.example.broadcasttest.MY_BROADCAST"/></intent-filter>
</receiver>

让 MyBroadcastReceiver 接收一条 com.example.broadcasttest.MY_BROADCAST 的广播。

  • 给 MainActivity 增加一个按钮,并在 onCreate() 方法中添加点击事件,代码如下:
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");sendBroadcast(intent);}
});
  • OK,运行一下,点击按钮,就会收到我们发出的广播。

本地广播 LocalBroadcast

前面用到的都是全局广播,可以被其他任何程序接收到,会引起一些安全性问题。下面是一个发送接收本地广播的例子。

  • 定义一个 LocalReceiver ,代码如下:
public static class LocalReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();}
}
  • 使用 LocalBroadcastManager 来注册接收器、发送广播,代码如下:
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);Button button = (Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");localBroadcastManager.sendBroadcast(intent);}});intentFilter = new IntentFilter();intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");localReceiver = new LocalReceiver();localBroadcastManager.registerReceiver(localReceiver, intentFilter);
}
  • 别忘了取消注册,代码如下:
@Override
protected void onDestroy(){super.onDestroy();localBroadcastManager.unregisterReceiver(localReceiver);
}
  • OK,运行一下,点击按钮,就会接收到我们发出的本地广播啦。

PS:本地广播无法通过静态注册的方式接收。

尽管我试图在本文中尽量完整的进行描述,但受限于篇幅和我的个人水平,本文难免有所遗漏,欢迎在评论中指出。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!

关于作者(About Me)

addict

from: https://www.cnblogs.com/DebugLife/p/4391160.html

Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播相关推荐

  1. Android阅读手札:第一行代码(第一章)

    <第一行代码>作为Android开发入门的经典书籍,是我们非常好的阅读选择,初学者可以迅速了解相关知识,老司机也可以温故知新巩固基础.笔者使用该书的第二版,也就是绿色封面的第一章节< ...

  2. Android Studio 单刷《第一行代码》系列目录

    本文转载自: http://www.cnblogs.com/debuglife/p/4355687.html 作者:DebugLife 转载请注明该声明. 前言(Prologue) 本系列将使用 An ...

  3. android studio生命周期代码,Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期...

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  4. Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  5. Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  6. Android Studio 单刷《第一行代码》系列 04 —— Activity 相关

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  7. Android Studio 单刷《第一行代码》系列 03 —— Activity 基础

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  8. Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  9. Android Studio 单刷《第一行代码》系列 01 —— 第一战 HelloWorld

    前言(Prologue) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Android ...

最新文章

  1. ubuntun 下安装 node-v0.10.26
  2. 1/2 数据获取:本地数据的获取
  3. java编译程序的基本命令是什么,【填空题】Java中编译java 程序的命令是 1 ,执行java程序的命令是 java 。...
  4. 方差分析中的“元”和“因素”是什么?
  5. SQL --几张表公有字段的查询
  6. 【已解决】离散数学项目工序表转换为网络图(完整步骤版)
  7. 通俗解释什么是指令集
  8. html js 在文本框选择自动计算乘,怎么让JS实现在文本框中输入数字时,同时输出这个数字,并再输出一个乘以0.39的值?...
  9. 潇洒郎: 解决EDAS论文上传文字没有嵌入问题:Upload failed: The font Arial,Italic is not embedded in the file.
  10. 腾讯云MySQL备份本地恢复
  11. 爱乐乐益生菌有效解决宝宝从小慢性湿疹
  12. 【人工智能项目】深度学习实现白葡萄酒品质预测
  13. 点击highcharts下钻柱状图更改其他柱子图
  14. 编写ESM风格的nodejs应用
  15. OpenStack搭建私有云一:认证服务
  16. 简介:Virtual Kubelet
  17. https://developer.aliyun.com/group/cloud?aly_as=stGCd_wh?_k=g6zacxsource=5176.11533457userCode=9fo
  18. 从源码分析LinkedList集合
  19. 先知——纪伯伦(2)
  20. 实验室安全准入考试系统V3.0

热门文章

  1. centos mongodb安装及简单实例
  2. 指南:如何运用谷歌Google Shopping和Product Listing Ads
  3. 以太坊钱包1-Android-创建钱包
  4. 感受亚马逊:“抠门”的巨无霸电商如何炼成
  5. 顶级风投First Round Capital对创业者的30个建议
  6. Linux Daemon Writing HOWTO
  7. jvm性能调优实战 -53接口超时导致的OOM
  8. Linux 中复制文件到多个目录中
  9. 邀请参加活动的邀请函_邀请函||王坝镇中心幼儿园邀请家长参加期中分享活动的通知...
  10. 【线索二叉树详解】数据结构06(java实现)