package com.jiuqi.njt.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsMessage; import android.util.Log; /** * 监听短信广播 * * @author joe * */ public class SMSReceiver extends BroadcastReceiver { /** * 将监听到的短信内容返回接口 * @author joe * */ public interface GetNjtSms{ public void returnSmsData(String smsData); } private GetNjtSms getNjtSms; private String TAG = "SMSReceiver"; public static String SMSACTION = "android.provider.Telephony.SMS_RECEIVED"; /** * * @param getNjtSms * 监听到发送验证码的短信时将验证码返回的接口对象 */ public SMSReceiver(GetNjtSms getNjtSms) { this.getNjtSms = getNjtSms; } public SMSReceiver() { super(); } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals(SMSACTION)) { Object[] pdus = (Object[]) intent.getExtras().get("pdus"); // 不知道为什么明明只有一条消息,传过来的却是数组,也许是为了处理同时同分同秒同毫秒收到多条短信 // 但这个概率有点小 SmsMessage[] message = new SmsMessage[pdus.length]; StringBuilder sb = new StringBuilder(); Log.d(TAG, "pdus长度" + pdus.length); for (int i = 0; i < pdus.length; i++) { // 虽然是循环,其实pdus长度一般都是1 message[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); sb.append("接收到短信来自:\n"); sb.append(message[i].getDisplayOriginatingAddress() + "\n"); String smsMessage = message[i].getDisplayMessageBody(); sb.append("内容:" +smsMessage); /** * 如果短信内容中包含制定标志,说明是农机通的验证码,就取出验证码返回 */ if(smsMessage.contains("全国农机化生产信息管理服务平台")){ if(null!=getNjtSms){ smsMessage=smsMessage.trim(); String yanzhengma=""; // int index = smsMessage.indexOf("验证码为:"); // yanzhengma = smsMessage.substring(index+5, index+11); /** * 将短信里面的数字取出来作为验证码返回 */ if(smsMessage != null && !"".equals(smsMessage)){ for(int k=0;k<smsMessage.length();k++) { if(smsMessage.charAt(k)>=48 && smsMessage.charAt(k)<=57) { yanzhengma+=smsMessage.charAt(k); } } } getNjtSms.returnSmsData(yanzhengma); } } } Log.d(TAG, sb.toString()); } } }