Android四大组件之Broadcast(广播接收BroadcastReceiver)

●广播Broadcast 是全局事件,发送后任务结束,发送出的事件针对整个设备有效。
Broadcast发送的广播有两种形式 :
1,系统发送的广播,针对全部应用程序

2,应用程序发送的广播, 一般只是应用程序中的Receiver来接收

广播发送时会有一个String用来标识这条广播==>action

发送广播 :

Intent bcIntent = new Intent() ;
bcIntent.setAction("actionString") ;
bcIntent.putExtra("bc", bc);//存入数据,在广播接收的时候可以取出(也可以不传值)
sendBroadcast(bcIntent) ;//发送广播

接收广播 BroadcastReceiver

 定义广播接收器

class Mybroadcastreceiver extends BroadcastReceiver{
       @Override
       onReceive(Context context , Intent intent){
        String action = intent.getAction();//取出发送广播时存放的action用于效验是否是需要的广播
        String str = arg1.getStringExtra("bc");//取出发送广播时存放的数据
   }
}


//案例:是系统短信广播:

public class ReceiverSms extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		SmsMessage msg = null;
		Bundle bundle = intent.getExtras();
		if (bundle != null) {
			Object[] pdusObj = (Object[]) bundle.get("pdus");
			for (Object p : pdusObj) {
				msg = SmsMessage.createFromPdu((byte[]) p);
				// 得到消息的内容
				String msgTxt = msg.getMessageBody();
				// 时间
				Date date = new Date(msg.getTimestampMillis());
				SimpleDateFormat format = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss");
				String receiveTime = format.format(date);
				// 短信发送者
				String senderNumber = msg.getOriginatingAddress();
				Toast.makeText(context, "来短消息了!", Toast.LENGTH_LONG).show() ;

			}
		}

	}
}


注意:广播接收时注册 BroadcastReceiver两种方式:

第一种:java 代码注册(该java代码执行期间有效)

一般在Activity的onCreate中进行注册 :

private void registerR() {

BroadcastReceiver receiver = new Mybriadcastreceiver();

IntentFilter filter = new IntentFilter();

filter.addAction("广播的String类型的标识action")

filter.addAction("广播的String类型的标识action")//如果有发送了两条广播就要注册两条广播

registerReceiver(receiver , filter) ;

}

但是最后需要在Activity的onDestroy()中取消注册:

unregisterReceiver(receiver) ;

第二种:AndroidManifest中注册(Receiver在设备启动过程中一直能接收广播,一般用于手机系统的广播接受,比如:短信,电话,闹铃等)

<receiver android:name="Receiver类的路径">
<intent-filter>
<action android:name="广播的String类型的标识action" />
<action android:name="广播的String类型的标识action2" />
</intent-filter>
</receiver>


●广播分为有序广播和无序广播
其中有序广播发送sendOrderBroadcast(),可以通过abortBroadcast取消广播的继续发送。


●接收短信,系统短信是有序广播

manifest.xml中注册 
<receiver android:name="com.example.receiver.ReceiverSms">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值