Android 短信验证码自动填充
2023-06-13 09:12:27 时间
大家好,又见面了,我是你们的朋友全栈君。
一、前言:
这周项目做优化,为用户操作更加方便,注册、忘记密码、更换手机号、所需要的获取验证码操作,增加 获取短信验证码,然后自动填写到输入框中。思路简单,主要是监听短信的广播,然后正则短信中的验证码
二、具体代码:
package com.taikongdan.app.service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by merbng on 2016/4/6.
*/
public class SMSReceiver extends BroadcastReceiver {
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
public static final String TAG = "ImiChatSMSReceiver";
public interface ISMSListener {
void onSmsReceiver(String verifyCode);
}
private static ISMSListener mSMSListener;
public SMSReceiver(ISMSListener mSMSListener) {
this.mSMSListener = mSMSListener;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
SmsMessage[] messages = getMessageFromIntent(intent);
for (SmsMessage message : messages
) {
// 在这里你可以对放松的号码进行判断,只接受目标号码的验证码
String msg = message.getDisplayMessageBody();
Pattern p = Pattern.compile("\\d{6}");//这里你可以更改数字来指定验证码的位数
Matcher m = p.matcher(msg);
String verifyCode = null;
while (m.find()) {
verifyCode = m.group();
break;
}
if (mSMSListener != null) {
mSMSListener.onSmsReceiver(verifyCode);
}
}
}
}
private SmsMessage[] getMessageFromIntent(Intent intent) {
Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
byte[][] pduObjes = new byte[messages.length][];
for (int i = 0; i < messages.length; i++) {
pduObjes[i] = ((byte[]) messages[i]);
}
byte[][] pdus = new byte[pduObjes.length][];
int pduCount = pdus.length;
SmsMessage[] msgs = new SmsMessage[pduCount];
for (int i = 0; i < pduCount; i++) {
pdus[i] = pduObjes[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return msgs;
}
}
在Activity onCreate中,注册广播,
<pre name="code" class="java"> @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rememeberactivity);
mReceiver = new SMSReceiver(this);
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mReceiver, filter);
}
在界面销毁的时候 解绑广播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160334.html原文链接:https://javaforall.cn
相关文章
- android自动画廊,Android3D画廊效果与自动轮播Banner
- android图片资源加密,Android平台图像文件加密
- android activity自动跳转,Android activity跳转之finish()方法的作用
- android bindservice方法,Android bindservice方法返回false
- 自己动手用Android和Xposed编写一个微信聊天机器人——《微信聊天精灵》实现关键词自动回复。
- android app 退出功能,Android 完美退出 App (Exit)
- android定时器取消,Android定时器崩溃取消
- Android短信验证码控件,Android中实现短信验证码自动填入
- 【Android布局】在程序中设置android gravity 和 android layout Gravity属性
- android telephony 原理解析与开发指南_Android逆向pdf
- Drozer-Android安全测试
- android 搜索自动匹配关键字并且标红
- 【Android 应用开发】AndroidUI设计之 布局管理器 - 详细解析布局实现
- 【错误记录】Flutter / Android 报错 ( AAPT: error: attribute android:requestLegacyExternalStorage not found )
- 【Android 文件管理】分区存储 ( 创建与查询图片文件 )
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )
- 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
- 【错误记录】Android Studio 编译时 lint 检查报错 ( WARNING: DSL element ‘android.dataBinding.enabled‘ is obsolet )
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ⑤ ( 优化 Gradle 构建脚本 | 构建脚本结构 | 闭包定义及用法 | 依赖配置 | android 块配置 )
- Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局详解手机开发
- android获取短信并自动填充详解手机开发
- Android自动打包工具aapt详解手机开发
- 基于android示例程序(bitmapfun)高效加载图片让人无语地方
- 探讨:你真的会用Android的Dialog吗?