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);
}
小结:
去短信库获取短信比较不容易被拦截
分享到:
相关推荐
在IT行业中,自动获取短信验证码并填充是一项常见的自动化任务,特别是在移动应用或网站的身份验证环节。这个过程涉及到了几个关键的技术点,包括短信监听、数据解析以及自动化控制。以下是对这些知识点的详细解释:...
在IT行业中,自动获取短信验证码并填充以及倒计时是一项常见的功能,特别是在用户注册、登录、支付等场景中。这个功能极大地提升了用户体验,减少了手动输入验证码的繁琐步骤,同时也为应用的安全性提供了一定保障。...
* @brief 获取验证码(Get verification code) * * @param method 获取验证码的方法(The method of getting verificationCode) * @param phoneNumber 电话号码(The phone number) * @param zone 区域号,...
6. **定时器集成**:为了模拟短信验证码的有效时间,codeView可能集成了NSTimer,当用户获取验证码后开始倒计时,并显示剩余时间。 7. **事件响应**:codeView会监听用户的输入事件,当用户完成验证码输入后,会...
本文将详细解析"android.mac.ios平台的自动返回短信验证码接口java"这一主题,涵盖核心概念、设计原理以及实现方法。 首先,短信验证码是一种常见的身份验证手段,用于确保用户在进行敏感操作时是合法且知情的。它...
- 如果应用需要读取短信以自动填充验证码,需要请求`Privacy - SMS Usage Description`权限。 11. **状态管理**: - 使用MVVM或MVC架构时,可以创建一个`ViewModel`来管理验证码请求的状态,方便UI与模型之间的...
短信验证码的自动填充主要依赖于Android的`SMS Retriever API`,这是一个官方提供的接口,允许应用安全地获取短信验证码而无需请求读取短信的权限。在Android端,我们需要创建一个BroadcastReceiver来监听接收到的...
在iOS开发中,验证码倒计时是一个常见的功能,通常用于用户获取短信验证码后限制再次发送的时间,以防止滥用。这个“ios-验证码倒计时.zip”文件中的代码可能实现了一个基于GCD(Grand Central Dispatch)的倒计时器...
短信验证码自动填充是一种提高用户体验和效率的技术,尤其在移动应用和网页登录、注册或安全验证过程中常见。自动填充功能能够帮助用户快速输入接收到的验证码,减少手动输入的错误和时间消耗。 首先,我们要理解...
本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下 实现思路很简单: 1、在需要输入验证码的Activity代码注册监听短信的广播 2、拦截短信,获取其中的验证码 3、回写到EditText ...
《短信验证码自动填写功能的实现》 在移动应用开发中,短信验证码已经成为验证用户身份、保障账户安全的重要手段。本文将深入探讨如何实现一个自动填写短信验证码的功能,以提升用户体验,减少用户操作步骤。 首先...
2. **显示与发送**:将生成的验证码通过网络发送到客户端,如显示在界面上或者通过短信、邮件发送给用户。 3. **用户输入**:用户需要在指定时间内正确输入接收到的验证码。 4. **验证比对**:用户输入后,服务器会...
3. **获取短信验证码倒计时的实现**:当用户请求获取短信验证码后,后台会发送一条包含验证码的短信。前端可以启动倒计时,并在倒计时结束后允许用户提交验证码。 这些技术都是提高用户体验和安全性的重要组成部分...
在iOS应用开发中,图片验证码(CAPTCHA)是一种常见的安全机制,用于防止自动脚本或机器人非法获取敏感信息,如短信验证码。本文将详细介绍如何在iOS项目中实现一个自定义的图片验证码组件。 首先,我们需要一个...
而安卓系统虽然可以自动读取短信填充验证码,但需要获取短信授权,这可能引发隐私和安全问题。大多数应用并不请求此授权,仅少数如百度贴吧会这样做。 iOS系统的一键填充功能依赖于系统级别的集成,确保了统一和...
在iOS开发中,有时我们需要集成短信验证码功能来增强用户账户的安全性。本篇文章将详细介绍如何在Swift项目中实现这一功能,以及如何添加动态倒计时显示。我们将使用Mob提供的免费短信验证码SDK,它允许开发者轻松地...
5. **设备API和权限**:在手机上运行的应用需要获取相应的权限才能访问短信服务,这通常涉及到与操作系统(如Android或iOS)的API交互。 6. **错误处理和调试**:编写这样的程序需要考虑各种可能出现的问题,如网络...
总的来说,SMSCodeButton为iOS开发者提供了一种简洁、高效的方式来实现短信验证码的倒计时功能,减少了代码重复,提高了开发效率,同时也优化了用户体验。通过深入理解和使用这个开源组件,我们可以更好地构建安全、...
短信验证码是手机短信控件的一个关键应用场景,用于用户身份验证。当用户注册、登录或执行敏感操作时,系统会向用户手机发送一个一次性密码,用户输入该密码以证明他们拥有相应的手机号码。这增强了账户的安全性,...
Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证码,一些app马上就能自动获取并填上验证码,省去我们手动填写验证码。原理就是通过Android的ContentProvider组件间接访问系统的...