使用广播要定义一个广播接收类,如
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 }
可以采用动态和静态注册广播两种形式
静态:
<!--静态注册 -->
<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);