android入门——BroadCast(1)

使用广播要定义一个广播接收类,如

 1 package com.example.wkp.broadcast;
 2 
 3 import android.content.BroadcastReceiver;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.os.Bundle;
 7 import android.telephony.SmsMessage;
 8 import android.util.Log;
 9 
10 /**
11  * Created by wkp on 2016/9/20.
12  */
13 public class MyReceiver extends BroadcastReceiver {
14     @Override
15     public void onReceive(Context context, Intent intent) {
16         //第一个参数携带Receiver运行信息 第二个参数携带广播的详细内容
17         Log.v("hh","get smsMessage");
18         //取出intent数据
19         Bundle bundle=intent.getExtras();
20         //得到短信实体,一个SmsMessage对象可以保存140字节,号码在数组的0号,后面的全部是内容
21         //如果内容太多,那么SmsMessage数组的长度就会很大
22         Object[] object=(Object[])bundle.get("pdus");
23         SmsMessage[] messages=new SmsMessage[object.length];
24         for(int i=0;i<messages.length;i++){
25             messages[i]=SmsMessage.createFromPdu((byte[])object[i]);
26             //得到短信内容
27             Log.v("hehe",messages[i].getOriginatingAddress());
28 
29         }
30         //得到短信号码
31         Log.v("haha",messages[0].getMessageBody());
32     }
33 }
MyReceiver.java

可以采用动态和静态注册广播两种形式

静态:

 <!--静态注册 -->
<receiver android:name=".MyReceiver">
<intent-filter>
<!-- 动作 打开飞行模式时触发广播 -->
<!--<action android:name="android.intent.action.AIRPLANE_MODE"/>-->
<!-- 收到短信时 暂时无法实现 -->
<!--<action android:name="android.provider.Telephony.SMS_RECEIVED"/>-->
<!--<action android:name="android.provider.Telephony.SMS_DELIVER"/>-->
</intent-filter>
</receiver>


动态:onCreate方法中
//        动态注册
// 动态注册不启动app广播无效
IntentFilter filter=new IntentFilter();
//开关飞行模式时接收广播
filter.addAction("android.intent.action.AIRPLANE_MODE");
//filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver,filter);
原文地址:https://www.cnblogs.com/wangkaipeng/p/5893212.html