Broadcast Receiver

(1)Broadcast Receiver简介

   Broadcast Receiver(广播接收者)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。

    广播是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的广播进行过滤接收并响应的一类组件。

   Broadcast Receiver自身并不实现图形用户界面,但是当它收到某个通知后,Broadcast Receiver可以启动Activity作为响应,或者通过NotificationMananger提醒用户,或者启动Service等等。

(2)Broadcast Receiver机制

    在Android里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。

(a)第一种注册方式:静态注册(以接收短信为例)

在AndroidManifest.xml中注册:

<receiver android:name =".MyBroadcastReceiver"> 

 <intent-filter> 

   <action android:name ="android.provider.Telephony.SMS_RECEIVED"/> 

 </intent-filter> 

</receiver> 


当然了需要权限:

<uses-permission android:name ="android.permission.RECEIVE_SMS"/> 

<uses-permission android:name ="android.permission.SEND_SMS"/> 


实现:

public class MyBroadcastReceiver extendsBroadcastReceiver { 

   String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

   @Override
   public void onReceive(Context context, Intent intent) { 

      if (intent.getAction().equals(SMS_RECEIVED)) { 

          // 接收短信后相关处理; 

      } 
    }
} 


 

(b)第二种注册方式:动态注册

实现:

private BroadcastReceivermyBroadcastReceiver = new BroadcastReceiver() { 

   @Override 

   public void onReceive(Context context, Intent intent) { 

       // 相关处理

    }

}; 

 

代码中注册:

IntentFilter intentFilter = newIntentFilter("android.provider.Telephony.SMS_RECEIVED");

registerReceiver(myBroadcastReceiver,intentFilter);

(3)Broadcast Receiver生命周期

生命周期只有十秒左右,如果在onReceive()内做超过十秒内的事情,就会报ANR(Application NoResponse)程序无响应的错误信息。它的生命周期为从回调onReceive()方法开始到该方法返回结果后结束。

(4)Broadcast Receiver作用

你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

(5)Broadcast Receiver注册方式区别

动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值