//权限
< uses-permission android:name ="android.permission.RECEIVE_SMS" />
//注册广播
IntentFilter filter = new IntentFilter();
filter.addAction( "android.provider.Telephony.SMS_RECEIVED" );
filter.setPriority(Integer. MAX_VALUE);
registerReceiver( smsReceiver,
filter);
//广播内容
//监听短信广播
private BroadcastReceiver smsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Object[] objs = (Object[]) intent.getExtras().get("pdus");
for (Object obj : objs) {
byte[] pdu = (byte[]) obj;
SmsMessage sms = SmsMessage.createFromPdu(pdu);
// 短信的内容
String message = sms.getMessageBody();
Log.d("TAG", "message = " + message);
String from = sms.getOriginatingAddress();
Log.d("TAG", "from = " + from);
if (SERVICECHECKNUM.equals(from.toString().trim()) || TextUtils.isEmpty(SERVICECHECKNUM)) {
Time time = new Time();
time.set(sms.getTimestampMillis());
String time2 = time.format3339(true);
Log.d("TAG", from + " " + message + " " + time2);
strContent = from + " " + message;
//mHandler.sendEmptyMessage(1);
if (!TextUtils.isEmpty(from)) {
String code = patternCode(message);
if (!TextUtils.isEmpty(code)) {
strContent = code;
mHandler.sendEmptyMessage(1);
}
}
}else {
return;
}
}
}
};
private BroadcastReceiver smsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Object[] objs = (Object[]) intent.getExtras().get("pdus");
for (Object obj : objs) {
byte[] pdu = (byte[]) obj;
SmsMessage sms = SmsMessage.createFromPdu(pdu);
// 短信的内容
String message = sms.getMessageBody();
Log.d("TAG", "message = " + message);
String from = sms.getOriginatingAddress();
Log.d("TAG", "from = " + from);
if (SERVICECHECKNUM.equals(from.toString().trim()) || TextUtils.isEmpty(SERVICECHECKNUM)) {
Time time = new Time();
time.set(sms.getTimestampMillis());
String time2 = time.format3339(true);
Log.d("TAG", from + " " + message + " " + time2);
strContent = from + " " + message;
//mHandler.sendEmptyMessage(1);
if (!TextUtils.isEmpty(from)) {
String code = patternCode(message);
if (!TextUtils.isEmpty(code)) {
strContent = code;
mHandler.sendEmptyMessage(1);
}
}
}else {
return;
}
}
}
};
如果要做读取短信验证码的话
//短信验证码内容 验证码是6位数字的格式
private String strContent;
private String patternCoder = "(?<!\\d)\\d{6}(?!\\d)" ;
/**
* 匹配短信中间的6个数字(验证码等)
*
* @param patternContent
* @return
*/
private String
patternCode(String patternContent) {
if (TextUtils.isEmpty(patternContent))
{
return null ;
}
Pattern p = Pattern. compile(patternCoder);
Matcher matcher = p.matcher(patternContent);
if (matcher.find())
{
return matcher.group();
}
return null ;
}
计时功能
//计时重发
private class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
mSendButton.setClickable(false);
mSendButton.setText(millisUntilFinished / 1000 + "秒后重新发送");
}
@Override
public void onFinish() {
mSendButton.setText("获取验证码");
mSendButton.setClickable(true);
}
}
private class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
mSendButton.setClickable(false);
mSendButton.setText(millisUntilFinished / 1000 + "秒后重新发送");
}
@Override
public void onFinish() {
mSendButton.setText("获取验证码");
mSendButton.setClickable(true);
}
}
mTiemTimeCount = new TimeCount(60000,
1000);
mTiemTimeCount .start();
本文介绍了如何在Android应用中监听短信接收,并从中提取验证码进行验证。包括权限申请、广播注册、短信内容解析及验证码匹配等功能。
3313

被折叠的 条评论
为什么被折叠?



