Android自动获取短信验证码功能
程序员文章站
2022-08-02 16:46:38
先给大家展示下效果图,如果大家感觉不错,请参考实现代码。
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开发工程中集成mob短信验证码功能的方法
-
Android利用CursorLoader实现短信验证码自动填写
-
Android自定义Chronometer实现短信验证码秒表倒计时功能
-
Android项目类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现
-
Android应用自动更新功能实现的方法
-
Android应用APP自动更新功能的代码实现
-
Android账号注册实现点击获取验证码倒计时效果
-
Android中实现基本的短信拦截功能的代码示例
-
Android手机号注册、绑定手机号获取短信验证码实例
-
Android自定义Chronometer实现短信验证码秒表倒计时功能