仿照支付宝等——自动获取短信中的验证码

仿照淘宝支付宝等,自动获取服务器端发来的验证码,实际是监听特定的号码的内容,主要方法如下:

当系统收到短信时,会发出一个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;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv = (TextView) this.findViewById(R.id.et);
		intentFilter.setPriority(2147483647);// 设置优先级

	}

	@Override
	protected void onStart() {
		super.onStart();
		registerReceiver(smsBR, intentFilter);
	}

	@Override
	protected void onStop() {
		super.onStop();
		unregisterReceiver(smsBR);
	}

	/**
	 * 内部类 用于监听短信
	 * 
	 * @author Administrator
	 * 
	 */
	private class smsBroadcastReceiver extends BroadcastReceiver {
		@Override
		public 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分拿走吧!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值