Android 广播接收器

原创 2016年08月31日 15:38:58
一、特点:
1.生命周期短:只在onReceive 中, 进行生命周期,onReceive结束 生命周期结束。
2.最迷你的组件。
3.运行时间短,速度快,在主线程创建,如果在10秒内没有结束,就出现错误--程序无响应。
4.每次运行都会执行onReceive()方法,在执行完毕后,会自动销毁。
5.需要完成耗时的事件时,可以通过Intent传给Service,由Service来完成。

二、接收系统的广播:
广播接收器可以接受多种形式的广播,只要事件注册了不广播,我们就可以接收广播,并做出相应的处理事件操作。
1.广播的注册:
--广播的注册分为两种:动态注册和静态注册。

****动态注册***在java文件中注册***
实例: 动态注册监听网络变化:
在MainActivity中定义一个内部类netWorkChangeReceiver继承BroadcastReceiver ,并重写父类的onReceive()方法,这样每当网络状态发生变化时,onReceive()方法就会得到执行,这里使用Toast提示一段文本信息,代码如下:
class netWorkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "network change", Toast.LENGTH_SHORT).show(); } }

接着在onCreate()方法中进行动态注册,然后在重写 onDestroy()方法进行释放(销毁)
private IntentFilter intentFilter; private netWorkChangeReceiver netWorkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//动态注册:创建一个IntentFilter的实例,添加网络变化的广播(功能是对组件进行过滤,只获取需要的消息) intentFilter = new IntentFilter(); //进行过滤的设置
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//监听网络变化
//创建NetWorkChangeReceiver的实例,并调用registerReceiver()方法进行注册 netWorkChangeReceiver = new netWorkChangeReceiver();
registerReceiver(netWorkChangeReceiver, intentFilter);//并调用registerReceiver()方法进行注册 } //取消注册,一定要记得,不然系统会报错 @Override protected void onDestroy() { //重写onDestroy()方法 super.onDestroy(); unregisterReceiver(netWorkChangeReceiver); //取消注册 }
总结:
1.创建一个广播接收器,创建一个相应广播的事件;--应用的方法 onReceive()
2.注册一个广播,接收到广播,并出发创建的事件;--动态注册方法-- IntentFilter、registerReceiver
3.最后将注册销毁。--应用的方法 onDestroy()、 unregisterReceiver()
4.动态注册的方式比较灵活,但缺点是:必须在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreate()方法中的,为了让程序在未启动的情况下就能接收到广播,这里就需要使用到静态注册。

***静态注册**在xml文件中*******
例子:接收手机一条开机的广播,当收到这条广播时,就可以调用onCreate()方法中的实现逻辑,实现开机启动功能。
1.新建一个类:BootCompleteReceiver,让他继承BroadcastReceiver,在onReceive()方法中简单地Toast一下,代码如下:
public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show(); }}
可以看到,这里不再使用内部类的方式来定义广播接收器,因为稍后我们需要在清单文件AndroidManifest.xml中将这个广播接收器的类名注册进去。
然后修改清单文件AndroidManifest.xml,代码如下:

<!-- 应用权限声明--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.m05_broadcastreceiver01.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--静态注册部分 --> <receiver android:name=".BootCompleteReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application>

总结:在静态方法注册中,我们需要创建一个新的类,因为我们需要在清单文件中的<receiver >去注册这个类,并<uses-permission> 标签中定义使用的权限。

三、发送自定义的广播:
1.发送标准广播:(静态注册的方式)
---在发送广播之前,我们先定义一个广播接收器来接受广播:
新创建一个类,继承BroadcastReceiver(广播接收器)

public class MyBroadRervice extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
//接受广播成功,我们使用Toast,弹出“OK”,表示接受成功
Toast.makeText(context, "OK", Toast.LENGTH_LONG).show();
}

}
--接着在清单文件中进行静态注册:
<receiver android:name="com.mybroad.util.MyBroadRervice">
<intent-filter >
<action android:name="com.mybroad.MyBroadRervice"/>
</intent-filter>
</receiver>
<!-- 发送的广播为:com.mybroad.MT_RECIVER -->
-----在MainActivity.java文件中,设置按钮来触发发送广播事件:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.mybroad.MyBroadRervice");
sendBroadcast(intent);
}
});
}


四、广播的有序和无序:
广播是一种可以跨线程的通信方式,其他程序也是可以接收到的。到此处,我们以前操作的广播都是无序的,现在我们来了解有序广播。
--有序广播不仅有先后的顺序,而且前面的广播还可以将后面的广播拦截。
--实例操作--学习 有序广播:

我们将自定义广播的MainActivity.java的代码进行一下改良:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.mybroad.MyBroadRervice");
sendBroadcast(intent); //发送无序广播
sendOrderedBroadcast(intent, null); //发送有序广播
}
});
}

--接着在清单文件中在静态注册的方法中添加一个属性:android:process="10",这个属性就是设置广播的优先级的,我们设置的范围是-100~100,。

<receiver android:name="com.mybroad.util.MyBroadRervice"
android:process="10">
<intent-filter >
<action android:name="com.mybroad.MyBroadRervice"/>
</intent-filter>
</receiver>
<!-- 发送的广播为:com.mybroad.MT_RECIVER -->

--最后如果我们想要拦截这个广播,防止后面的接收器的接收,我们只需要更改我们创建的广播接收器的一行代码即可。
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "OK", Toast.LENGTH_LONG).show();
abortBroadcast(); //进行拦截,防止后面的接收器接收次广播
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android四大组件---BroadcastReseiver(广播接收器)

基本用法 简易闹钟基本用法BroadcastReseiver就是用来接收特定标志的(可以理解为收音机的频率,这里用的“com.android.receiver”)广播 首先在Manifest的act...

Android 四大组件之一 :BroadCastReceiver 广播接收器详解

转自: http://yangguangfu.iteye.com/blog/1063732 BroadCastReceiver简介BroadCastReceiver源码位于:framework/...

Android应用程序注册广播接收器(registerReceiver)的过程分析

前面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/发布机制,因此,使用这种消息驱动模型的第一步便是订阅消息;而对Android应用程序来说,订阅消息其实就是注册广播接收器,本文...

Android 广播接收器 BroadcastReceiver 注册、注销、优先级、拦截

 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完成后系...

Xamarin.Android广播接收器

制作一个最简单的Broadcast 实现一个最简单的广播接收器需要继承BroadcastReceiver类(抽象类),并且还要实现OnReceive方法,   默认情况下:广播接收器也是运行在U...

Android — 之广播接收器

一、广播的概念广播,额,顾名思义,就是…..就是广播嘛…..(别打脸,Please~~)。 广播是Android中 一种 重要的消息传输机制,消息可以是在应用程序之间,也阔以只在程序内部进行传播。在...

Android基础:广播接收器及其生命周期介绍

广播接收器(Broadcast Receivers)只是接收广播并对广播信息做出作出反应,多数的广播是由系统代码发出的——比如反应时区变化的通知,电量低的通知,照了一张照片的通知,或者用户修改了系统语...

Android基础-broadcastreceiver(广播接收器)

什么是broadcastreceiver?     broadcastreceiver是一种在应用之间传输信息数据的一种机制。是Android四大组件之一。那么broadcastreceiver是如...

玩转Android---组件篇---Broadcast Receiver(广播接收器)

原址:http://hualang.iteye.com/category/143855 Braodcast Receiver顾名思义就是广播接收器,它和时间处理机制类似,但是事件处理机制是程序组...

Android 自定义广播接收器

/** * 自定义接收器 * * 如果不定义这个 Receiver,则: * 1) 默认用户会打开主界面 * 2) 接收不到自定义消息 */ public class PushRecei...
  • lm78ax
  • lm78ax
  • 2017年08月09日 11:05
  • 78
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 广播接收器
举报原因:
原因补充:

(最多只允许输入30个字)