Android自动获取短信验证码功能
程序员文章站
2022-05-07 11:52:37
先给大家展示下效果图,如果大家感觉不错,请参考实现代码。
1.自定义监听类
/**
* 短信监听器,用于自动填充验证码
*/
public clas...
先给大家展示下效果图,如果大家感觉不错,请参考实现代码。
1.自定义监听类
/** * 短信监听器,用于自动填充验证码 */ public class smscontentobserver extends contentobserver { public final string sms_uri_inbox = "content://sms/inbox";//收信箱 private activity activity = null; private string smscontent = "";//验证码 private edittext verifytext = null;//验证码编辑框 private string sms_address_prnumber = "10690329013589";//短息发送提供商 private string smsid = ""; //短信观察者 收到一条短信时 onchange方法会执行两次,所以比较短信id,如果一致则不处理 public smscontentobserver(activity activity, handler handler, edittext verifytext) { super(handler); this.activity = activity; this.verifytext = verifytext; } @override public void onchange(boolean selfchange) { super.onchange(selfchange); cursor cursor = null;// 光标 // 读取收件箱中指定号码的短信 cursor = activity.getcontentresolver().query(uri.parse(sms_uri_inbox), new string[]{"_id", "address", "body", "read"}, //要读取的属性 "address=? and read=?", //查询条件是什么 new string[]{sms_address_prnumber, "0"},//查询条件赋值 "date desc");//排序 if (cursor != null) { cursor.movetofirst(); if (cursor.movetofirst()) { //比较和上次接收到短信的id是否相等 if (!smsid.equals(cursor.getstring(cursor.getcolumnindex("_id")))) { string smsbody = cursor.getstring(cursor.getcolumnindex("body")); //用正则表达式匹配验证码 pattern pattern = pattern.compile("[0-9]{6}"); matcher matcher = pattern.matcher(smsbody); if (matcher.find()) {//匹配到6位的验证码 smscontent = matcher.group(); if (verifytext != null && null != smscontent && !"".equals(smscontent)) { verifytext.requestfocus();//获取焦点 verifytext.settext(smscontent);//设置文本 verifytext.setselection(smscontent.length());//设置光标位置 } } smsid = cursor.getstring(cursor.getcolumnindex("_id")); } } } } }
2.在登录页面事件化监听类
//实例化短信监听器 smscontentobserver mobserver = new smscontentobserver(getactivity(), new handler(), met_auth_code); // 注册短信变化监听 mcontext.getcontentresolver().registercontentobserver(uri.parse("content://sms/"), true, mobserver);
3.声明读取短信权限
<uses-permission android:name="android.permission.receive_sms" /> <uses-permission android:name="android.permission.read_sms" /> <uses-permission android:name="android.permission.write_sms" />
4.为了防止内存泄漏,记得注销监听
@override public void ondestroy() { super.ondestroy(); //注销短信监听 mcontext.getcontentresolver().unregistercontentobserver(mobserver); }
小结:
去短信库获取短信比较不容易被拦截
以上所述是小编给大家介绍的android自动获取短信验证码功能,希望对大家有所帮助
上一篇: 都叫些什么名字
推荐阅读
-
Android开发之获取短信验证码后按钮背景变化并且出现倒计时
-
Android手机注册登录时获取验证码之后倒计时功能(知识点总结)
-
Android实现短信加密功能(发送加密短信、解密本地短信)
-
SpringBoot + SpringSecurity 短信验证码登录功能实现
-
Android 取消蓝牙配对框实现自动配对功能
-
Android编程实现canvas绘制柱状统计图功能【自动计算宽高及分度值、可左右滑动】
-
Android编程实现canvas绘制饼状统计图功能示例【自动适应条目数量与大小】
-
Android 中使用ContentObserver模式获取短信用正则自动填充验证码
-
Android编程实现定时发短信功能示例
-
Android实现短信验证码自动填写功能