/*动态方式注册广播接收者*/
receiver = new AutoMessageReceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(1000);//设置1000,也有拦截失败的几率,但是很小
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
getActivity().registerReceiver(receiver, filter);
public class AutoMessageReceiver extends BroadcastReceiver {
/**
* 广播消息类型
*/
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
protected AutoMessageReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (SMS_RECEIVED_ACTION.equals(action)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null && pdus.length > 0) {
SmsMessage[] messages = new SmsMessage[pdus.length];
int length = messages.length;
for (int i = 0; i < length; i++) {
byte[] pdu = (byte[]) pdus[i];
messages[i] = SmsMessage.createFromPdu(pdu);
}
for (SmsMessage msg : messages) {
// 获取短信内容
String content = msg.getMessageBody();
String sender = msg.getOriginatingAddress();
// 拦截目标短信
if ("10086".equals(sender)) {
if (!TextUtils.isEmpty(content)) {
String msgPassword = getNumbers(content);
if (!TextUtils.isEmpty(msgPassword) && isNumeric(msgPassword)) {
//收到验证码后,启动APP,并把验证码传递到页面
mCodeEdit.setText(msgPassword);
break;
}
}
// 对于特定的内容,取消广播
abortBroadcast();
}
}
}
}
}
}
/**
* 截取数字
*
* @param content
* @return
*/
public String getNumbers(String content) {
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
return matcher.group(0);
}
return "";
}
/**
* <判断字符串是否是数字>
*
* @param str
* @return
*/
public boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
}