您的位置:首页 > 移动开发 > Android开发

Android自动识别短信验证码

2017-02-16 00:00 387 查看
摘要: 短信识别

一个Android应用注册时常用的自动读取短信验证码的例子。

1.先注册短信监听

//短信监听
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
intentFilter.setPriority(Integer.MAX_VALUE);
registerReceiver(bReceiver, intentFilter);

2.短信监听回调

private BroadcastReceiver bReceiver= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Object[] objs = (Object[]) intent.getExtras().get("pdus");
String format = intent.getStringExtra("format");
if(format != null){
Log.e("format", format);
}
for (Object obj : objs) {
byte[] cfpdu = (byte[]) obj;
SmsMessage sms = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
sms = SmsMessage.createFromPdu(cfpdu,format);
}else{
sms = SmsMessage.createFromPdu(cfpdu);
}
// 读取短信的内容
String message = sms.getMessageBody();
Log.e("短信内容", message);
//这里的if是用来判断接收到的验证码是不是你自己的,否则可能会读取到别的程序的验证码(虽然可能性很低,但是不排除这种情况)。将XXX换成自己的短信内容中的关键字,比如(淘宝网,阿里云等等)
if (message.indexOf("XXX")!= -1) {
//这里我直接按照验证码的位置截取了,还可以用正则表达式去匹配。
yzm = message.substring(11,17);
Message messages = new Message();
messages.arg1 = 3;
//通知handler
handler.sendMessage(messages);
}
}
}};

Handler handler = new Handler() {
public void handleMessage(Message msg) {
//验证码请求成功
if (msg.arg1 == 1) {
time.start();
msg(msg.obj.toString());
} else if (msg.arg1==3){
//为验证码文本框赋值
user_verification_code.setText(yzm);
//调用登录按钮点击事件
btnLoginClick();
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Android Studio