Android自动获取短信验证码
2016-06-18 16:24
363 查看
一、工具封装
2.设置监听 Activity oncreate方法即可
3.取消注册
public class GetCodeUtil extends ContentObserver { public static final String SMS_URI_INBOX = "content://sms/inbox"; private Activity activity = null; private EditText verifyText = null; public SmsReadUtil(Activity activity, Handler handler, EditText verifyText) { super(handler); this.activity = activity; this.verifyText = verifyText; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); try { Uri uri = Uri.parse(SMS_URI_INBOX); String[] projection = new String[]{"_id", "address", "body", "read"}; // 读取指定号码的短信 //Cursor cursor = activity.getContentResolver() // .query(uri, projection, "address=? and read=?", // new String[]{"1069036136580", "0"}, "date desc"); // 获取非指定号码短信 Cursor cursor = activity.getContentResolver() .query(uri, projection, null, null, "date desc"); // 如果短信为未读模式 if (cursor != null) { cursor.moveToFirst(); if (cursor.moveToFirst()) { String smsbody = cursor.getString(cursor.getColumnIndex("body")); String smsContent = getAuthCode(smsbody); if (!TextUtils.isEmpty(smsContent)) { verifyText.setText(smsContent); verifyText.setSelection(smsContent.length()); } } cursor.close(); } } catch (SecurityException e) { e.printStackTrace(); Logger.e("read sms exception = " + e.getMessage()); } } /** * @param content 短信内容 * @return 截取得到的6位动态密码 */ public String getAuthCode(String content) { // 特殊校验,在为设置拦截固定号码时,可能拦截其他验证码,如果设置固定号码时,将此注释掉 if (!content.contains("康小白")) { return null; } Pattern continuousNumberPattern = Pattern.compile("[0-9\\.]+"); Matcher m = continuousNumberPattern.matcher(content); String authCode = ""; while (m.find()) { if (m.group().length() == 6) { authCode = m.group(); } } return authCode; } }
2.设置监听 Activity oncreate方法即可
// 注册短信变化监听 smsReadUtil = new SmsReadUtil(MineLoginActivity.this, new Handler(), editCode); getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsReadUtil);
3.取消注册
@Override protected void onDestroy() { super.onDestroy(); ContentResolver contentResolver = getContentResolver(); if (contentResolver != null) { contentResolver.unregisterContentObserver(smsReadUtil); } }
相关文章推荐
- 了解使用Android ConstraintLayout
- Retrofit与RxAndroid结合使用
- Android Scroll分析(二)——滑动的几种方法
- Weex Android SDK源码分析之Module(modal)
- canvas的save,restore方法的使用理解
- 安卓侧边栏实现
- Android中ListView长按事件和点击事件的冲突问题
- Android官方文档之Animation
- 简单的朋友圈界面-Android(一)
- Android AsyncTask
- Android——初识RxJava
- Android应用开发-数据存储和界面展现(二)
- Android中生成xml文件小demo
- Android中通过RxJava进行响应式程序设计的入门指南
- Android总结(1-3章)
- <Android学习笔记五>——JSON数据的解析
- Android Studio 第一次新建Android Gradle项目超级慢的解决方案
- Android 上传图片到服务器(PHP)
- Android之ViewpagerIndicator滑动导航栏
- Android 利用内容提供者添加联系人的操作