Android学习笔记(十)BroadcastReceiver初体验

  BroadcastReceiver是Android系统的四大组件之一,本质是一种全局的监听器,用于接收系统全局的广播消息。真因为如此,BroadcastReceiver可以很方便的是实现系统中不同组件之间的通讯。

一、创建BroadcastReceiver

  创建一个BroadcastReceiver很简单,只需创建一个BroadcastReceiver的子类即可:

public class MyReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		//如果onReceive内的操作10s内没有执行完成,Android会认为该进程无响应,所以不要再此作耗时操作
	}
} 

二、两种指定Receiver匹配的Intent的方式

  第一种:在AndroidManifest.xml文件中配置,如下:

<receiver android:name="com.codingblock.receiver.MyReceiver">
             <intent-filter>
                 <action android:name="com.codingblock.receiver.action.MyReceiver"/>
             </intent-filter>
</receiver> 

  第二种:在代码中动态注册,如下:

MyReceiver receiver = new MyReceiver();
registerReceiver(receiver, new IntentFilter("com.codingblock.receive.intent.action.MyReceiver")); 

三、启动一个BroadcastReceiver

  BroadcastReceiver用于接收程序(包括用户开发的程序和程序内建的系统)所发出的Broadcast Intent,启动一个BroadcastReceiver只需两步:

  第一步:创建一个需要启动BroadcastReceiver的Intent。

  第二步:调用Context的sendBroadcast()方法或sendOrderedBroadcast()方法来启动Intent;

  当一个Broadcast Intent被发出后,所有匹配该Intent的Receiver都有可能被启动。 

  当然,对Receiver不同的注册方式,需要用不同的方式去启动,两种注册方式对应的启动方法如下:

  在AndroidManifest.xml中配置的Receiver(2中第一种方法),启动方式如下:

Intent intent = new Intent(MainActivity.this, MyReceiver.class);
sendBroadcast(intent);

   在代码中动态注册的Receiver(2中第二种方法),启动如下:

Intent intent = new Intent("com.codingblock.receive.intent.action.MyReceiver");
sendBroadcast(intent);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java呓语

Tips·检测应用程序被卸载

我们知道广播ACTION_PACKAGE_REMOVED可以监听应用程序卸载,但不幸的是这个意图被卸载的程序是不可知的,所以无法监听到自己的程序被卸载。

753
来自专栏Android源码框架分析

Android面试题:bindService获取代理是同步还是异步

1561
来自专栏技术小黑屋

Read Output From Shell

Python provides a lot of method to read output from a just executed shell. Howev...

982
来自专栏为数不多的Android技巧

Android 插件化原理解析——Service的插件化

在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity、BroadcastReceiver组件的工作原理以及...

722
来自专栏Android源码框架分析

Android Service重启恢复(Service进程重启)原理解析

Android系统中,APP进程被杀后,等一会经常发现进程又起来了,这个现象同APP中Service的使用有很大关系,本文指的Service是通过startSe...

1263
来自专栏iOSDevLog

Android 原生 BLE 开发

1942
来自专栏三流程序员的挣扎

Navigation 详解三

在 BottomNavigationActivity 中添加 Toolbar,修改主题为 NoActionBar 的。

662
来自专栏FreeBuf

深入挖掘APP克隆实验

0×00前言 在上一篇文章《WebView域控不严格读取内部私有文件实验》中,对webview跨域访问进行了简单的实验,后续决定深入挖掘一下APP克隆,之前文章...

21610
来自专栏james大数据架构

在Android中实现service动态更新UI界面

之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的。那么如何实现service动态...

1897
来自专栏汪毅雄的专栏

Android 7.0 中 Service bind 流程详解

我们知道,Android 启动 Service 有两种方式,startService 和 bindService。本文主要讲述Service bind 过程的最...

9801

扫码关注云+社区