有时候,为了更好的用户体验,在验证码这个环节,不需要用户手工输入,直接监听短信内容,实现验证码自动填充功能,比如百度外卖等APP上面都有. 在这里,我用比较粗糙的方式去实现它.
1. 先上界面 ,就一editText, 简单粗暴
device-2016-07-17-103218.png
2. 代码块 , 原理是通过短信接收器去监听所接受短信的内容 , 然后获取短信内容中的验证码部分 ,更新到界面上
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.validate);
filter = new IntentFilter();
//创建短信BroadcastReceiver
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
//优先级设置为最高
filter.setPriority(Integer.MAX_VALUE);
smsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//[1]获取发短信送的号码 和内容, 注意"pdus"是短信的key
Object[] objects = (Object[]) intent.getExtras().get("pdus");
for(Object pdu : objects){
//[2]获取smsmessage实例
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])pdu);
//[3]获取发送短信的内容
String smsBody = smsMessage.getMessageBody();
//[4]匹配验证码
Matcher m = Pattern.compile("[^0-9]").matcher(smsBody.toString());
String valCode = m.replaceAll("").trim().toString();
//[5]更新输入框
editText.setText(valCode);
//[6]验证码自动填充后 ,将光标移到文本后面
editText.setSelection(valCode.length());
}
}
};
//注册接收器
registerReceiver(smsReceiver, filter);
}
//取消注册接收器
@Override
protected void onDestroy() {
unregisterReceiver(smsReceiver);
super.onDestroy();
}
3. 注册清单添加用户权限-接收短信, 十分重要
<uses-permission android:name="android.permission.RECEIVE_SMS"/>