我们知道,只需通过代码就可以读到收件箱中的短信,发件箱中的短信;但是却没办法在短信发来的瞬间获取;如果我们在短信发来的一瞬间能得到相应的信息内容,那么我们就可以依次来展开很多应用了——也就是通过短信去远程操作一部手机。
如果想实时获取,就需要调用receiver了,写一个监听类,这样我们就可以实时获取短息信息了。
还是来看看代码吧。
首先,我们需要创建一个监听类SMSBroadcastReceiver,让他去继承BroadcastReceiver。
再来初始化一个常量ACTION,并赋短信相关参数值。
Android.provider.Telephony.SMS_RECEIVED
接着创建onReceive方法。
然后用getAction去监听手机短信相关动态,利用StringBuffer来保存短信信息。
再然后主要代码了。
@Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION)) { StringBuffer SMSAddress = new StringBuffer(); StringBuffer SMSContent = new StringBuffer(); Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdusObjects = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdusObjects.length]; for (int i = 0; i < pdusObjects.length; i++) { messages[i] = SmsMessage .createFromPdu((byte[]) pdusObjects[i]); } for (SmsMessage message : messages) { SMSAddress.append(message.getDisplayOriginatingAddress()); SMSContent.append(message.getDisplayMessageBody()); } } } }
代码中的SMSAddress为发送短信的号码,SMSContent为短信内容。
要想看到是否成功获取,最简单的方法就是把这两个参数打印出来。
System.out.println("发送号码:" + SMSAddress + "\n" + "短信内容:" + SMSContent);
不过要把他们加入for循环中,因为当新信息发来时,SMSAddress和SMSContent将被替换。
因此如果要是做应用时,也是在for循环中判断的。
最后要记得在Manifest.xml中注册监听器。