[android]代码库
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class BroadcastReceiverTest extends BroadcastReceiver {
/* 该字符串并不像我们前面的发短信程序中的action一样是自定义的,因为这里我们要接受的是由其他手机的系统
短信程序发送的短信,所以这里要用android.provider.Telephony.SMS_RECEIVED来匹配系统发送的Intent
*/
private final String Receive_Message = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
// 获取该Intent的action名称
String intentActionName = intent.getAction();
if(Receive_Message.equals(intentActionName)){
StringBuilder stringBuilder = new StringBuilder();
/*
*Bundle本质上是一个map,以键值对的形式存放着值。
*其内存放着通过putExtra()方法添加进去的数据,当然这个数据有可能是开发人员添加,也有可能是系统默认添加的。
*当没有任何数据的时候,返回null
* */
Bundle bundle = intent.getExtras();
/* 系统默认的发短信程序会将信息内容通过putExtra方法放入bundle中,其map中的key为pdus,这个是写死的噢
*从下面的代码我们还可以看到,系统将数据以一个包含byte数组的数组的形式,放入了map中。
*类似putExtra("pdus",Object[] obj); 其中obj的元素为byte数组。
*/
Object[] objects = (Object[]) bundle.get("pdus");
SmsMessage[]messages = new SmsMessage[objects.length];
for (int i = 0; i < objects.length; i++) {
// createFromPdu创建一个SmsMessage对象
messages[i] = SmsMessage.createFromPdu((byte[]) objects[i]);
}
/*
* 我们这里其实还有一个getOriginatingAddress方法可以用来获取信息内容。
* 它与getDisplayOriginatingAddress的区别在于前者只针对于短信,后者还可以处理油email得到的SmsMessge对象
* 与此类似,我们还有一个getDisplayMessageBody和getDisplayMessageBody方法,两者的区别和上面的一样。
* */
for(SmsMessage message:messages){
stringBuilder.append("接收到来自:/n");
// 获取信息来源地址
stringBuilder.append(message.getDisplayOriginatingAddress());
stringBuilder.append("/n-------传来的信息---------/n");
// 获取信息内容
stringBuilder.append(message.getDisplayMessageBody());
}
Toast.makeText(context,stringBuilder.toString(), Toast.LENGTH_LONG).show();
/* 新建一个意图并发给系统以启动一个activity,在此我们通过i.addFlags()为其设置响应方式,
*系统会创建一个新的task来存放SmsReceiver这个Activity,并且启动了它,
*这就保证了SmsReceiver这个activity我们始终都能看到
*/
Intent i = new Intent(context,SmsReceiver.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
[代码运行效果截图]