android自動驗證碼填寫
首先定義一個廣播接收者接受系統短信廣播,對收到短信的廣播進行判斷,如果是目標號碼就進行驗證碼的解析,并實現接口返回給調用處。
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.telephony.SmsMessage;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SMSReceiver extends BroadcastReceiver
{
public interface ISMSListener {
public void onSmsReceive(String verifyCode);
}
private static ISMSListener mSMSListener;
public SMSReceiver(ISMSListener ismsListener) {
mSMSListener = ismsListener;
}
public static final String TAG = "ImiChatSMSReceiver";
//android.provider.Telephony.SMSReceiver.Intents
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
SmsMessage[] messages = getMessagesFromIntent(intent);
for (SmsMessage message : messages) {
// LogUtil.d(message.getOriginatingAddress() + " : " +
//
// message.getDisplayOriginatingAddress() + " : " +
//
// message.getDisplayMessageBody() + " : " +
//
// message.getTimestampMillis());
// 在這里你可以對放松的號碼進行判斷,只接受目標號碼的驗證碼
String msg = message.getDisplayMessageBody();
String verifyCode = null;
Pattern p = Pattern.compile("\\d{6}");//這里你可以更改數字來指定驗證碼的位數
Matcher m = p.matcher(msg);
while (m.find()) {
verifyCode = m.group();
break;
}
if (mSMSListener != null) {
mSMSListener.onSmsReceive(verifyCode);
}
}
}
}
public final SmsMessage[] getMessagesFromIntent(Intent intent) {
Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
byte[][] pduObjs = new byte[messages.length][];
for (int i = 0; i < messages.length; i++) {
pduObjs[i] = (byte[]) messages[i];
}
byte[][] pdus = new byte[pduObjs.length][];
int pduCount = pdus.length;
SmsMessage[] msgs = new SmsMessage[pduCount];
for (int i = 0; i < pduCount; i++) {
pdus[i] = pduObjs[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return msgs;
}
}
Activity實現接口并注冊廣播。
public class MainActivity extends AppCompatActivity implements SMSReceiver.ISMSListener {
private SMSReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mReceiver =new SMSReceiver(this);
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mReceiver,filter);
}
@Override
public void onSmsReceive(String verifyCode) {
Toast.makeText(this, "驗證碼為:" + verifyCode, Toast.LENGTH_SHORT).show();
//獲取驗證碼并填寫到EditText中,即可
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}
}
添加權限:
<uses-permission android:name=”android.permission.RECEIVE_SMS”></uses-permission><uses-permission android:name=”android.permission.READ_SMS”></uses-permission>
OK搞定。
本文由用戶 vfci8361 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!