Android如何通过手机自动获取短信验证码

作者:lijiao 时间:2022-12-10 00:19:47 

本文实例为大家分享了Android实现手机自动获取短信验证码功能,供大家参考,具体内容如下

1、短信监听广播

2、读取短信内容

3、截取短信内容【可以 reg截取】

4、填写至相应控件

PS:DevStore测试没有获取到验证码

Android如何通过手机自动获取短信验证码

Android如何通过手机自动获取短信验证码

源码片段


public class MainActivity extends Activity {
private BroadcastReceiver smsReceiver;
private IntentFilter filter2;
private Handler handler;
private EditText et;
private String strContent;
private String patternCoder = "(?<!--\\d)\\d{6}(?!\\d)";

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 et = (EditText) findViewById(R.id.et);
 handler = new Handler() {
  public void handleMessage(android.os.Message msg) {
   et.setText(strContent);
  };
 };
 filter2 = new IntentFilter();
 filter2.addAction("android.provider.Telephony.SMS_RECEIVED");
 filter2.setPriority(Integer.MAX_VALUE);
 smsReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
   Object[] objs = (Object[]) intent.getExtras().get("pdus");
   for (Object obj : objs) {
    byte[] pdu = (byte[]) obj;
    SmsMessage sms = SmsMessage.createFromPdu(pdu);
    // 短信的内容
    String message = sms.getMessageBody();
    Log.d("logo", "message  " + message);
    // 短息的手机号。。+86开头?
    String from = sms.getOriginatingAddress();
    Log.d("logo", "from  " + from);
    Time time = new Time();
    time.set(sms.getTimestampMillis());
    String time2 = time.format3339(true);
    Log.d("logo", from + " " + message + " " + time2);
    strContent = from + " " + message;
    handler.sendEmptyMessage(1);
    if (!TextUtils.isEmpty(from)) {
     String code = patternCode(message);
     if (!TextUtils.isEmpty(code)) {
      strContent = code;
      handler.sendEmptyMessage(1);
     }
    }
   }
  }
 };
 registerReceiver(smsReceiver, filter2);
}

@Override
protected void onDestroy() {
 super.onDestroy();
 unregisterReceiver(smsReceiver);
}

/**
 * 匹配短信中间的6个数字(验证码等)
 *
 * @param patternContent
 * @return
 */
private String patternCode(String patternContent) {
 if (TextUtils.isEmpty(patternContent)) {
  return null;
 }
 Pattern p = Pattern.compile(patternCoder);
 Matcher matcher = p.matcher(patternContent);
 if (matcher.find()) {
  return matcher.group();
 }
 return null;
}
}</pre-->

文章末尾为大家在分享两个专题,供大家参考:

《PHP验证码大全》

《ASP.NET验证码大全》

标签:android,验证码
0
投稿

猜你喜欢

  • windows下C#定时管理器框架Task.MainForm详解

    2021-06-06 13:59:06
  • C#定时器和随机数

    2023-10-28 15:30:34
  • Android中通知栏跳动问题解决方法

    2023-05-31 20:16:55
  • mybatis-plus QueryWrapper自定义查询条件的实现

    2023-04-05 20:50:07
  • Spring Boot 防止接口恶意刷新和暴力请求的实现

    2022-05-08 03:54:58
  • 详解android webView独立进程通讯方式

    2022-03-04 13:51:18
  • java排序算法之冒泡排序

    2023-04-05 21:03:42
  • c#测试本机sql运算速度的代码示例分享

    2022-10-18 00:04:24
  • 解决Android Studio4.1没有Gsonfomat插件,Plugin “GsonFormat” is incompatible的问题

    2021-08-27 22:10:37
  • Spring Boot 结合 aop 实现读写分离

    2023-09-29 07:53:02
  • C#自定义函数NetxtString生成随机字符串

    2022-06-18 20:43:39
  • Java四种常用线程池的详细介绍

    2021-09-29 17:45:46
  • java实现递归菜单树

    2023-02-01 00:03:06
  • @TransactionalEventListener的使用和实现原理分析

    2022-01-19 06:15:11
  • Commons beanutils组件简介

    2023-11-28 07:13:27
  • Android实现点击AlertDialog上按钮时不关闭对话框的方法

    2022-07-28 07:39:51
  • C#验证身份证号码正确性的实例代码(收藏)

    2023-12-18 17:28:33
  • JVM分配和回收堆外内存的方式与注意点

    2021-07-25 08:53:34
  • Spring初始化与销毁顺序案例演示详解

    2021-06-08 14:33:10
  • Java日常练习题,每天进步一点点(46)

    2023-10-05 11:20:29
  • asp之家 软件编程 m.aspxhome.com