android静态接收广播,Android中BroadcastReceiver(异步接收广播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文件,也是我采用的方法。

添加

动态注册的话需要这样做(未调试):

1. 在Activity的onCreate中:

//注册网络监听

IntentFilter filter = new IntentFilter();

filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

registerReceiver(mNetworkStateReceiver, filter);

2. 在Activity中的onDestroy中:

//取消监听

unregisterReceiver(mNetworkStateReceiver);

最终效果:

e677695997d5d48f067b6de956e5d55d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值