一个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(); } } };