读取短信验证码并自动设置给文本框
来源:互联网 发布:手机讲故事的软件 编辑:程序博客网 时间:2024/05/16 03:30
转自好友http://blog.csdn.net/cool_fuwei/article/details/50455898
最近项目中用到自动读取短信验证码这一功能,本人自己封装了一个工具类,可以直接拿来用,源码如下:
import android.app.Activity;import android.content.ContentValues;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Build;import android.os.Handler;import android.text.TextUtils;import android.util.Log;import android.widget.EditText;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 读取短信验证码,并设置验证码 * Created by cool on 2016/1/4. */public class ReadSmsContent extends ContentObserver { private Cursor cursor = null; private Activity mActivity; private EditText mEditText; public ReadSmsContent(Handler handler,Activity activity,EditText editText) { super(handler); this.mActivity = activity; this.mEditText = editText; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Log.e("tag", "onChange"); // 读取收件箱中指定号码的短信 cursor = mActivity.managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "body", "read"}, null, null, "_id desc"); if (cursor != null && cursor.getCount() > 0) { ContentValues values = new ContentValues(); values.put("read", "1"); //修改短信为已读模式 cursor.moveToNext(); int smsbodyColumn = cursor.getColumnIndex("body"); String smsBody = cursor.getString(smsbodyColumn); Log.e("399", "smsBody :" + smsBody); String verifyCode = getDynamicPassword(smsBody); if(TextUtils.isEmpty(verifyCode)){ return; } if(mEditText == null) { throw new RuntimeException("你传的EditText为空"); } mEditText.setText(verifyCode); //EditText获取焦点,3个属性必须同时设置 mEditText.setFocusable(true); mEditText.setFocusableInTouchMode(true); mEditText.requestFocus(); mEditText.setSelection(verifyCode.length());//设置光标位置 } //在用managedQuery的时候,不能主动调用close()方法, 否则在Android 4.0+的系统上, 会发生崩溃 if (Build.VERSION.SDK_INT < 14) { cursor.close(); } } /** * 从字符串中截取连续4位数字 * 用于从短信中获取动态密码 * * @param str 短信内容 * @return 截取得到的4位动态密码 */ public String getDynamicPassword(String str) { Pattern continuousNumberPattern = Pattern.compile("[0-9\\.]+"); Matcher m = continuousNumberPattern.matcher(str); String dynamicPassword = ""; while (m.find()) { if (m.group().length() == 4) { dynamicPassword = m.group(); } } return dynamicPassword; }}
该工具类的使用:
在Activity的onCreate方法中注册
readSmsContent = new ReadSmsContent(new Handler(),this,mVerifyCodeEditText);
//注册短信内容监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, readSmsContent);
在Activity的onDestroy中注销监听
//注销内容监听者
this.getContentResolver().unregisterContentObserver(readSmsContent);
需要的权限:
<uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" />
0 0
- 读取短信验证码并自动设置给文本框
- 读取短信验证码并自动设置给文本框
- 自动读取验证短信
- Android自动读取短信验证码
- 读取短信自动填写验证码功能
- android自动读取短信验证码
- 实现短信验证码自动拦截读取
- Android短信验证 自动输入到文本框
- 读取短信并复制验证码小工具
- 读取短信并复制验证码小工具
- android读取短信内容(自动填充验证码)
- android读取短信内容 自动填充验证码
- android读取短信内容 自动填充验证码
- 自动读取短信验证码LoaderManager和CursorLoader的使用
- Android获得短信中的验证码并自动填充
- android自动接收并填充短信验证码
- android获取短信验证码并自动填写的实现
- Android提取短信验证码并自动填写
- UIStackView
- MySql jdbc URL 参数及编码说明
- Git创建提交命令
- 减治算法之寻找两个递增序列的中位数
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- 读取短信验证码并自动设置给文本框
- 轮廓4
- OpenCV边缘检测的详细参数调节
- 深入理解IEnumerable和IQueryable两接口的区别
- 苹果Mac操作系统下怎么显示隐藏文件
- Android递归删除文件和文件夹
- java.util.List与java.awt.List有什么区别
- 异步FIFO为什么要使用格雷码(摘)
- Spring中配置文件读取多个Properties文件