Android自动填充短信验证码
来源:互联网 发布:旧java se 6 for mac 编辑:程序博客网 时间:2024/05/29 18:15
前言
短信验证码获取并自动填写现在已经成为一个人性化App的标配了,这篇文章将实现一个短信验证码获取并自动填写的demo。其实就是读取指定号码的短信并提取出验证码,然后赋值给EditText显示。
demo效果图:
读取短信
Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED
的有序广播,因此我们读取短信的验证码只需要监听这个广播然后提取出短信中的验证码即可,如:
/** * Created by luotong on 2017/9/28. */public class SMSBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "SMSBroadcastReceiver"; private OnReceiveSMSListener mOnReceiveSMSListener; public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SMS_RECEIVED_ACTION)) { Object[] pdus = (Object[]) intent.getExtras().get("pdus"); for(Object pdu:pdus) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte [])pdu); // 短信号码 String sender = smsMessage.getDisplayOriginatingAddress(); Log.d(TAG,sender+""); //短信内容 String content = smsMessage.getDisplayMessageBody(); // 筛选 if ("短信发送方号码".equals(sender) && mOnReceiveSMSListener!= null) { Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(content); if(matcher.find()) { mOnReceiveSMSListener.onReceived(matcher.group()); } abortBroadcast(); } } } } /** * 回调接口 */ public interface OnReceiveSMSListener { void onReceived(String message); } public void setOnReceiveSMSListener(OnReceiveSMSListener onReceiveSMSListener) { mOnReceiveSMSListener = onReceiveSMSListener; }}
代码注释比较清楚,通过SmsMessage对象可以得到短信的发送号码,短信内容及相关信息。当短信号码为你要读取的短信发送方号码时用正则表达式提取出短信内容的验证码,然后通过调用监听器的回调方法更新相应的UI。这里只需将短信验证发送方号码替换成相应的号码即可,如“106903561008710”为腾讯云注册发送的短信号码。
通常,我们只会在注册或登录页面读取短信验证码,所以,我们采用动态注册广播的方式注册这个广播,如:
// 注册广播IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION);// 设置优先级intentFilter.setPriority(Integer.MAX_VALUE);registerReceiver(mSMSBroadcastReceiver,intentFilter);
取消注册
@Overrideprotected void onDestroy() { super.onDestroy(); unregisterReceiver(mSMSBroadcastReceiver);}
MainActivity.java的代码为:
public class MainActivity extends AppCompatActivity implements SMSBroadcastReceiver.OnReceiveSMSListener { private SMSBroadcastReceiver mSMSBroadcastReceiver = new SMSBroadcastReceiver(); private EditText mEt_code; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEt_code = (EditText) findViewById(R.id.et_code); mSMSBroadcastReceiver.setOnReceiveSMSListener(this); // 注册广播 IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION); // 设置优先级 intentFilter.setPriority(Integer.MAX_VALUE); registerReceiver(mSMSBroadcastReceiver,intentFilter); } @Override public void onReceived(String message) { mEt_code.setText(message+""); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mSMSBroadcastReceiver); }}
这个demo的代码实现比较简单,就是监听广播,读取收到的短信,然后过滤筛选出我们要的验证码短信,再用正则表达式提取到验证码设置给EditText显示即可。大家下载或者自己编写这个demo并更改发送方短信号码运行,然后可以找个注册网址或是模拟验证码短信进行测试~
代码地址:https://github.com/ydxlt/auto_fill_code
阅读全文
0 0
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android 短信验证码自动填充
- Android实现自动填充短信验证码
- android短信验证码自动填充
- Android短信验证码自动填充
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android 自动填充短信验证码
- Android自动填充短信验证码
- 【Android短信拦截】自动填充短信验证码
- android--监听短信实现短信验证码自动填充
- 短信验证码自动填充
- 短信验证码自动填充
- Android开发(43) android 自动填充短信验证码
- Android获得短信中的验证码并自动填充
- android读取短信内容(自动填充验证码)
- 金融行业常见的报文格式与通讯方式
- 204
- grep -q 大小比较
- java 判断一个字符串是否包含某个字符
- Spring MVC 文件下载
- Android自动填充短信验证码
- springmvc Model ModelMap 和 ModelAndView的区别
- Android获取图片缓存及清除
- 快速排序
- Razor 页面显示类型转换
- Linux中怎么看出文件是硬连接?
- thinking in java抽象类 学习笔记
- redis入门学习
- 数论