如何获取短信验证码

参考:Android入门:广播接收者应用(短信窃听器)

短信窃听器客户端核心代码

在AndroidManifest.xml中添加权限:

  1. <uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->  

  2. <uses-permission android:name="android.permission.INTERNET"/><!-- 网络访问权限 -->  



(1)Object[] pdus = (Object[])intent.getExtras().get("pdus");获得短信数据

(2)byte[] pdu = (byte[])pdus[0];

(3)SmsMessage message  = SmsMessage.createFromPdu(pdu);将字节数组封装为SmsMessage

(4)String content = message.getMessageBody();获得短信内容

(5)String date = new Date(message.getTimestampMillis()).toLocaleString();获得短信时间

(6)String senderNumber = message.getOriginatingAddress();获得发送方号码

 

 

获取短信验证码

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
     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;
 }
}

你可能感兴趣的:(正则,短信验证码)