首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >获取手机端验证码

获取手机端验证码

作者头像
xiangzhihong
发布于 2018-01-29 03:04:43
发布于 2018-01-29 03:04:43
7.4K0
举报
文章被收录于专栏:向治洪向治洪

前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。

主要就是实时获取短信信息。

android上获取短信信息主要有BroadcastReceiver方式与数据库方式,要实时的话就BroadcastReceiver比较方便

代码语言:js
AI代码解释
复制
 public class SMSReceiver extends BroadcastReceiver{  
  private String verifyCode="";  
  public static final String TAG = "SMSReceiver";  
  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)){  
            SmsMessage[] messages = getMessagesFromIntent(intent);  
  for (SmsMessage message : messages){  
               Log.i(TAG, message.getOriginatingAddress() + " : " +  
                   message.getDisplayOriginatingAddress() + " : " +  
                   message.getDisplayMessageBody() + " : " +  
                   message.getTimestampMillis());  
               String smsContent=message.getDisplayMessageBody();  
               Log.i(TAG, smsContent);                
               writeFile(smsContent);//将短信内容写入SD卡 
            }  
        }  
     }  
  
  public final SmsMessage[] getMessagesFromIntent(Intent intent){  
         Object[] messages = (Object[]) intent.getSerializableExtra("pdus");  
  byte[][] pduObjs = new byte[messages.length][];  
  for (int i = 0; i < messages.length; i++)  
         {  
             pduObjs[i] = (byte[]) messages[i];  
         }  
  byte[][] pdus = new byte[pduObjs.length][];  
  int pduCount = pdus.length;  
         SmsMessage[] msgs = new SmsMessage[pduCount];  
  for (int i = 0; i < pduCount; i++)        {  
             pdus[i] = pduObjs[i];  
             msgs[i] = SmsMessage.createFromPdu(pdus[i]);  
         }  
  return msgs;  
     }  
  //将短信内容写到SD卡上的文件里,便于将文件pull到PC,这样可方便其它如WWW/WAP平台的自动化   
  @SuppressLint("SdCardPath")  
  public void writeFile(String str){  
         String filePath="/mnt/sdcard/verifyCode.txt";         
  byte [] bytes = str.getBytes();  
  try{  
         File file=new File(filePath);  
         file.createNewFile();  
         FileOutputStream fos=new FileOutputStream(file);  
         fos.write(bytes);  
         fos.close();  
         }catch(IOException e){  
             e.printStackTrace();  
         }         
     }  

如此当有短信收到时就可以将短信内容写到SD卡中的文件里

在另一个java类中写个读取文件内容的方法,并在写测试用例过程中,将得到的String按验证码的具体位置截取即可。

代码语言:js
AI代码解释
复制
 public String read(String str) throws IOException{    
         File file=new File(str);  
         FileInputStream fis=new FileInputStream(file);  
         StringBuffer sb=new StringBuffer();  
  
         BufferedInputStream bis=new BufferedInputStream(fis);  
         BufferedReader  read = new BufferedReader (new InputStreamReader(bis));  
  int c=0;  
  while ((c=read.read())!=-1) {  
             sb.append((char) c);  
         }  
         read.close();  
         bis.close();  
         fis.close();  
         Log.i(TAG, sb.toString());        
         String verify=sb.toString();          
  return verify;  
     }  

最后需要在manifest中增加申明,且注册权限

代码语言:js
AI代码解释
复制
 <receiver android:name="com.cplatform.surfdesktop.test.util.SMSReceiver">
             <intent-filter>
                 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
             </intent-filter>
  </receiver>
 
 <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.READ_SMS"/>

测试过程中需要用到短信验证码时就可以实时获取了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android广播和短信广播详解
在 Android 中,广播(Broadcast) 是一种用于应用之间、应用与系统之间通信的机制。通过广播,应用可以发送一些全局通知,其他应用可以接收并响应这些通知。Android 广播机制分为两类:常规广播 和 短信广播。
用户3672714
2025/08/05
580
Android获取短信验证码并自动填充的两种方式「建议收藏」
有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框。所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无bug。
全栈程序员站长
2022/09/15
3.7K0
如何监控别人的手机
关于大家一直说怎么使用,我来简单的说明一下吧,讲工程文件中的apk文件安装在你想监控的人的手机中,然后随便找个手机给他
知识与交流
2023/03/25
2.5K0
如何监控别人的手机
3-AII--BroadcastReceiver实现锁、开屏、短信监听
零、前言 1.按电源键,屏幕锁屏,再按电源键屏幕打开。在Activity开启时注册广播用来监听屏幕的关闭,Activity关闭时移除广播。 2.这里只能在该Activity中监听,退出后Broad
张风捷特烈
2018/09/26
1.2K0
Android 短信拦截及用途分析
本文讲述如何通过监听系统短信数据库内容变化来获取短信内容。首先介绍了Android系统如何获取短信数据库,然后通过SmsReceiver类来实现短信内容的监听。当有新的短信到来时,通过onReceive方法获取短信内容并解析,最后将获取到的短信内容输出到控制台。
用户1155943
2018/01/04
2.8K0
Android自动填充短信验证码
短信验证码获取并自动填写现在已经成为一个人性化App的标配了,这篇文章将实现一个短信验证码获取并自动填写的demo。其实就是读取指定号码的短信并提取出验证码,然后赋值给EditText显示。 demo效果图:
程思扬
2022/01/10
6.6K0
Android自动填充短信验证码
全局事件-广播(Broadcast)
广播是Android SDK的四大组件中唯一需要别动接收数据的组件。也就是说对于Activity、ContentProvider和Service都可以主动调用,并获取返回数据。而负责接收Broadcast数据的接收器却永远不知道什么时候可以接收到广播。从这种表现形式上看,很像面向对象中的事件(Event),对于事件(onClick、onKeydown)来说,从来不会预知用户什么时候触发他们,只能默默的等待不可预知的事件发生。因此,广播也可以被成为全局事件。
小小工匠
2021/08/16
1.3K0
Android开发笔记(五十四)数据共享接口ContentProvider
前面几节介绍了进程间通信的几种方式,包括消息包级别的Messenger、接口调用级别的AIDL、启动页面/服务级别的Notification,还有就是本节这个数据库级别的ContentProvider。 ContentProvider为存取数据提供统一的接口,它让不同APP之间得以共享数据。ContentProvider类本身是个服务端的数据存取接口,主要操作类似SQLite,也都提供了如下常见的数据库管理API: query : 查询数据。 insert : 插入数据。 update : 更新数据。 delete : 删除数据。 getType : 获取数据类型。 实际开发中,APP很少会开放数据接口给其他应用,所以ContentProvider类作为服务端接口反而基本用不到。Content组件中能够用到的场合,基本上是APP想要使用系统的手机通讯数据,比如查看联系人/短信/彩信/通话记录,以及对这些通讯信息进行增删改。
aqi00
2019/01/18
1.6K0
Android接收短信-createFromPdu
Android收到短信的事件是由系统发一个有序广播的,所以这里需要一个BroadcastReceiver。receiver收到的Intent里面并不是直接存储的短信内容,而是短信的原始数据。所以我们需要自己解码。
小小工匠
2021/08/16
4.3K0
android 获取收到短信验证码,Android自动获取短信验证码
在另一个java类中写个读取文件内容的方法,并在写测试用例过程中,将得到的String按验证码的具体位置截取即可。
全栈程序员站长
2022/09/15
10.2K0
Activity 跳转详解
你好! 我是 Graydalf ,有可能也叫 Gdalf ~ 今天被朋友问到如何设置一个广播来启动一个应用并显示数据,于是将自己了解到的记录下来,有什么较为 DEMO 的地方希望你能留言告诉我,谢谢。
全栈程序员站长
2022/08/31
7770
android广播
android广播其实上是发布-订阅模型,发布有两种方式,订阅也有两种方式 发布的两种方式是无序方式(普通广播)和有序方式(有序广播) 订阅的两种方式是静态订阅和动态订阅
码客说
2019/10/22
1.3K0
Android基础总结(10)——手机多媒体的运用:通知、短信、相机、视频播放
Android提供了一系列的API,是我们可以在程序中调用很多手机的多媒体资源,从而编写出更加丰富的应用程序。 1、通知的使用 通知(Notification)是Android中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。   无论在哪里创建通知,整体的步骤都是相同的,具体的步骤如下: 创建一个NotificationManager类的对象来
mukekeheart
2018/02/27
2.3K0
软件著作权的源代码_软件著作权源码被泄露
import android.content.BroadcastReceiver;
全栈程序员站长
2022/11/08
7050
Auto.js 调用系统短信、电话
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!
拉灯的小手
2022/03/29
4.1K0
Android短信验证码控件,Android中实现短信验证码自动填入
由于目前的好多应用都有短信验证,短信验证码收到后,用户手动输入已经显得有麻烦,于是我写了这篇博文,希望能对大家有所帮助。
全栈程序员站长
2022/09/15
8.8K0
语音兰度短信
原理:获取来电短信内容,调用系统的语音朗读功能。 效果图: 具体代码如下: 1,获取短信息: package com.internal.message;   import android.cont
xiangzhihong
2018/01/29
7850
语音兰度短信
Android 短信验证码自动填充
这周项目做优化,为用户操作更加方便,注册、忘记密码、更换手机号、所需要的获取验证码操作,增加 获取短信验证码,然后自动填写到输入框中。思路简单,主要是监听短信的广播,然后正则短信中的验证码
全栈程序员站长
2022/09/13
5.5K0
[android] 手机卫士黑名单功能(短信拦截)
前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭
唯一Chat
2019/09/10
1.7K0
[android] 手机卫士黑名单功能(短信拦截)
相关推荐
Android广播和短信广播详解
更多 >
交个朋友
加入前端学习入门群
前端基础系统教学 经验分享避坑指南
加入前端工作实战群
前端工程化实践 组件库开发经验分享
加入前端趋势交流群
追踪前端新趋势 交流学习心得
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档