仿照淘宝支付宝等,自动获取服务器端发来的验证码,实际是监听特定的号码的内容,主要方法如下:
当系统收到短信时,会发出一个action名称为android.provider.Telephony.SMS_RECEIVED的广播Intent,该Intent存放了接收到的短信内容,使用名称“pdus”即可从Intent中获取短信内容。最好使用动态注册的方法,去注册自定义的广播。
public class MainActivity extends Activity {private IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");private smsBroadcastReceiver smsBR = new smsBroadcastReceiver();private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) this.findViewById(R.id.et);intentFilter.setPriority(2147483647);// 设置优先级}@Overrideprotected void onStart() {super.onStart();registerReceiver(smsBR, intentFilter);}@Overrideprotected void onStop() {super.onStop();unregisterReceiver(smsBR);}/*** 内部类 用于监听短信* * @author Administrator* */private class smsBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();Object messages[] = (Object[]) bundle.get("pdus");SmsMessage smsMessage[] = new SmsMessage[messages.length];for (int n = 0; n < messages.length; n++) {smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);String fromNumber = smsMessage[n].getOriginatingAddress();String content = smsMessage[n].getMessageBody();// 消息时间// String time = DateUtil.dateToStr(new Date(smsMessage[n].getTimestampMillis()));if (fromNumber.equals("10086")) {// 如果是特定的电话号码的,则取出验证码tv.setText(patternCode(content));} else {// 这里做实验,同样不管接到谁的短信,都取出连续六位数字tv.setText(patternCode(content));}}}}/*** 6个数字的正则表达式*/private String patternCoder = "(?<!\\d)\\d{6}(?!\\d)";/*** 匹配短信中间的6个数字(验证码等)* * @param patternContent* @return*/public String patternCode(String patternContent) {if (TextUtils.isEmpty(patternContent)) {return null;}Pattern p = Pattern.compile(patternCoder);Matcher matcher = p.matcher(patternContent);if (matcher.find()) {return matcher.group();}return null;}
}
如果是真机验证,最好和10086等服务号聊聊,如果是用虚拟机,使用eclipse的DDMS功能
进入DDMS:通过菜单Windows→Open Perspective→DDMS或者对应的图标进入DDMS的界面。
发短信前设置:点击DDMS的界面上面的Emulator Control,然后按图所示配置,其中模拟器的端口号就是模拟器的电话号码。
短信接收:点击Emulator Control中的Send按钮后就可以在安卓系统中看到信息栏提示,到安卓系统的短信应用里就可以看到短信内容了。
!!自己的demo 0分拿走吧!!