首页 > 系统 > Android > 正文

Android中BroadcastReceiver(异步接收广播Intent)的使用

2019-10-24 21:09:46
字体:
来源:转载
供稿:网友
Broadcast Receiver是Android的五大组件之一,使用频率也很高,用于异步接收广播Intent,本文将详细介绍,需要的朋友可以参考下
 
Broadcast Receiver简介 
Broadcast Receiver是Android的五大组件之一,使用频率也很高。 
用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、广播接收者(BroadcastReceiver)用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收,广播接收者和JMS中的Topic消息接收者很相似. 
广播接收器只能接收广播,对广播的通知做出反应,很多广播都产生于系统代码.如:时区改变的通知,电池电量不足、用户改变了语言偏好或者开机启动等. 
广播接收器没有用户界面,但是,它可以为它们接收到信息启动一个Activity或者使用NotificationManager来通知用户. 
生命周期 
一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。 
因此从这个特征可以看出,在所调用的onReceive(Context, Intent)函数里,不能有过于耗时的操作,不能使用线程来执行。对于耗时的操作,请start service来完成。因为当得到其他异步操作所返回的结果时,BroadcastReceiver 可能已经无效了。 
监听网络状态变化的例子 
下面通过一个例子来使用BroadcastReceiver。 
NetworkStateReceiver:接收网络状态变化时系统发出的Broadcast。 
复制代码代码如下:

package com.example.networkbroadcastreceiver; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 
import android.widget.Toast; 
public class NetworkStateReceiver extends BroadcastReceiver { 
private static final String TAG = "NetworkStateReceiver"; 
@Override 
public void onReceive(Context context, Intent intent) { 
Log.i(TAG, "network state changed."); 
if (!isNetworkAvailable(context)) { 
Toast.makeText(context, "network disconnected!", 0).show(); 

else Toast.makeText(context, "network connected!", 0).show(); 

/** 
* 网络是否可用 

* @param context 
* @return 
*/ 
public static boolean isNetworkAvailable(Context context) { 
ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo[] info = mgr.getAllNetworkInfo(); 
if (info != null) { 
for (int i = 0; i < info.length; i++) { 
if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
return true; 



return false; 


MainActivity: 
复制代码代码如下:

package com.example.networkbroadcastreceiver; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
public class MainActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

静态注册和动态注册 
写好BroadcastReceiver 之后要对其进行注册。 
静态注册需要修改manifest文件,也是我采用的方法。 
添加 
复制代码代码如下:

<SPAN style="FONT-SIZE: 14px"><receiver android:name=".NetworkStateReceiver" > 
<intent-filter> 
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
<category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 
</receiver></SPAN> 

动态注册的话需要这样做(未调试): 
1. 在Activity的onCreate中: 
//注册网络监听 
IntentFilter filter = new IntentFilter(); 
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
registerReceiver(mNetworkStateReceiver, filter); 
2. 在Activity中的onDestroy中: 
//取消监听 
unregisterReceiver(mNetworkStateReceiver); 
最终效果: 
Android中BroadcastReceiver(异步接收广播Intent)的使用

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表