文档章节

如何获取短信验证码

jacky_123
 jacky_123
发布于 2015/01/25 17:27
字数 351
阅读 90
收藏 1

参考: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;
 }
}

© 著作权归作者所有

jacky_123
粉丝 3
博文 55
码字总数 26297
作品 0
南通
程序员
私信 提问
加载中

评论(1)

APP或网站/微信【注册决定成败】市场调查分析:目前80%的用户是因为注册短信验证码体验不佳,从而放弃注册!这是多么痛的领悟-----我公司是专业做短信验证码的供应商,6年间我们只做了一件事让每个用户注册短信验证码5秒到达,为近16000APP客户提供服务! 加我微-信: wkk-555 咨询!
短信验证码被拦截如何解决?

最近做一个活动,发现好多短信验证码不知道是不是被拦截了,别人用一个过期或者欠费手机号码就可以把发送短信的信息拦截到了,大家平常接收短信验证码的时候,有试过被拦截到的情况吗?好像支付宝...

刘鑫华
2013/04/28
28K
37
springmvc中不同Controller如何获取同一个session

做一个app,一个注册页面。具体为:用户输入手机号后点击获取验证码,会调用接口发送短信,我把生成的验证码放入session中,然后用户输入完信息加上验证码,调用保存接口,保存接口首先对验证...

CHOSEN-ONE
2018/03/25
4.4K
13
网站安全检测之用户密码找回网站漏洞的安全分析与利用

我们SINE安全在对网站,以及APP端进行网站安全检测的时候发现很多公司网站以及业务平台,APP存在着一些逻辑上的网站漏洞,有些简简单单的短信验证码可能就会给整个网站带来很大的经济损失,很...

网站安全者
2018/08/20
0
0
Web安全指南 | 八招应对短信验证码攻击

如今,大量的网站、网站、手机app都在使用短信验证码作为验证用户身份的安全技术措施。尤其在年底,企业的促销、抽奖、互动活动会迎来一个高峰期,用到短信验证码的场景非常频繁。 但近期,阿...

正禾
2018/03/12
0
0
解决网站漏洞如何修复对短信验证码被盗刷 该怎么办

公司的商城网站刚上线运营不到一个星期,网站就被攻击了,导致公司网站的短信通道被人恶意刷了几万条短信,损失较大,同时服务器也遭受到了前所未有的攻击。CPU监控看到网站在被盗刷短信验证...

网站安全
2018/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
35分钟前
84
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
44分钟前
4
0
正则表达式基础(一)

1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转...

清自以敬
47分钟前
4
0
idea中@Data标签getset不起作用

背景:换电脑以后在idea中有@data注解都不生效 解决办法:idea装个插件 https://blog.csdn.net/seapeak007/article/details/72911529...

栾小糖
53分钟前
5
0
Apache Kudu 不能删除不存在的数据

使用Apache Kudu客户端,对KafkaConnect Sink 进行扩展。 使用的Apache Kudu 的Java 客户端。突然有天发现作业无法提交,一直报错。 后来才发现这是Kudu自身的一种校验机制。为了忽略这种校验...

吐槽的达达仔
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部