您的位置:首页 > 其它

短信验证并提取验证码

2013-11-27 16:18 218 查看
现在绝大多数应用都是用手机号码来注册,注册时会收到一条短信验证码来验证注册,一般要想提高客户口碑的体验度都会做一个短信监听,并提取到验证输入框中。网上也有人说如果装了类似360的短信拦截短信,可能就不那么灵了,这个好像之前我也试过,有时候好像也是,但这次我没再试过。我想就算有,为了那些没有装类似的软件的用户,也应该为他们做一步,让他们体验的更好,节省一点他们的时间也是应该的。懒得啰嗦了,有注释,直接看。我一向不那么勤快和不喜欢啰嗦。直接贴代码

在onCreate()方法中注册短信广播,在Activity类中销毁的方法中取消注册的广播

动态注册,我一般喜欢在动态中注册

receive = new SMSBroadcastReceiver();

IntentFilter filter = new IntentFilter();

filter.setPriority(2147483647); //权限设到最高

filter.addAction("android.provider.Telephony.SMS_RECEIVED");//短信的action

registerReceiver(receive, filter);

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

if(null != receive)

unregisterReceiver(receive);

super.onDestroy();

}

//短信拦截提取验证码

public class SMSBroadcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Log.i(TAG,"onReceive()");

if(!intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))

return;

Object[] pdus = (Object[])intent.getExtras().get("pdus");//获取短信内容

for(Object pdu : pdus){

byte[] data = (byte[]) pdu;//获取单条短信内容,短信内容以pdu格式存在

SmsMessage message = SmsMessage.createFromPdu(data);//使用pdu格式的短信数据生成短信对象

String sender = message.getOriginatingAddress();//获取短信的发送者

String content = message.getMessageBody();//获取短信的内容

Log.i(TAG,"onReceive(), sender = "+sender+" : content = "+content);

if(sender.startsWith("+8613")){//验证码短信发来的号码是这几个数字开头的

Log.i(TAG,"smsContent = "+content);

if(null != content && content.contains("本次注册[八方通]")){

String regNum = content.substring(content.indexOf(":")+1, content.indexOf(","));

Log.i(TAG,"regNum = "+regNum+"; index = "+content.indexOf(":")+1);

ed_registNum.setText(regNum);

}

//本次注册[八方通]验证码是:4058 ,本验证码[3分钟]内有效,感谢您使用.【云雀】

}

}

}

}

下面这个是在配置文件中的注册,静态注册(不运行应用程序也会监听)

这个类是在内部,所以会有“$”符号,有些情况可能还要在类的前面加上静态关键字

<receiver android:name=".activity.RegistActivity$SMSBroadcastReceiver" android:exported="false">

<intent-filter android:priority="2147483647">

<action android:name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: