一、前言:
這周項目做優化,爲用戶操作更加方便,註冊、忘記密碼、更換手機號、所需要的獲取驗證碼操作,增加 獲取短信驗證碼,然後自動填寫到輸入框中。思路簡單,主要是監聽短信的廣播,然後正則短信中的驗證碼
二、具體代碼:
package com.taikongdan.app.service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by merbng on 2016/4/6.
*/
public class SMSReceiver extends BroadcastReceiver {
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
public static final String TAG = "ImiChatSMSReceiver";
public interface ISMSListener {
void onSmsReceiver(String verifyCode);
}
private static ISMSListener mSMSListener;
public SMSReceiver(ISMSListener mSMSListener) {
this.mSMSListener = mSMSListener;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
SmsMessage[] messages = getMessageFromIntent(intent);
for (SmsMessage message : messages
) {
// 在這裏你可以對放鬆的號碼進行判斷,只接受目標號碼的驗證碼
String msg = message.getDisplayMessageBody();
Pattern p = Pattern.compile("\\d{6}");//這裏你可以更改數字來指定驗證碼的位數
Matcher m = p.matcher(msg);
String verifyCode = null;
while (m.find()) {
verifyCode = m.group();
break;
}
if (mSMSListener != null) {
mSMSListener.onSmsReceiver(verifyCode);
}
}
}
}
private SmsMessage[] getMessageFromIntent(Intent intent) {
Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
byte[][] pduObjes = new byte[messages.length][];
for (int i = 0; i < messages.length; i++) {
pduObjes[i] = ((byte[]) messages[i]);
}
byte[][] pdus = new byte[pduObjes.length][];
int pduCount = pdus.length;
SmsMessage[] msgs = new SmsMessage[pduCount];
for (int i = 0; i < pduCount; i++) {
pdus[i] = pduObjes[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return msgs;
}
}
在Activity onCreate中,註冊廣播,<pre name="code" class="java"> @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rememeberactivity);
mReceiver = new SMSReceiver(this);
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mReceiver, filter);
}
在界面銷燬的時候 解綁廣播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}