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());
}
}
}