Android注册登录实时自动获取短信验证码
程序员文章站
2024-03-06 17:23:08
android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。
主要就是实时获取短...
android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。
主要就是实时获取短信信息。
android上获取短信信息主要有broadcastreceiver方式与数据库方式,要实时的话就broadcastreceiver比较方便,分享一篇文章大家可以查看一下,。
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按验证码的具体位置截取即可。
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中增加申明,且注册权限
<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"/>
测试过程中需要用到短信验证码时就可以实时获取了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Spring Boot Mysql 数据库操作示例
下一篇: java编程实现邮件定时发送的方法