Android移动自动化中短信验证码解决方案

在近期支付项目中遇到各种业务需要进行短信验证的情况,以前遇到过注册、找回密码也需要,但并非业务流程。自动化过程中会把忽略这样的用例,这次是不行了必须要解决这个问题。

本次项目用的是robotium框架,开始也想过直接在apk中添加短信监听,但是一直失败。为了不影响进度只能换一个方案解决。于是就想到单独做一个apk安装到手机上,当短信来了就获取短信的验证码并写入到SD卡中。然后case中再读取该验证码,顺利解决。下边贴上源码,水平有限,海涵。
短信监听类:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.regex.Matcher;

import java.util.regex.Pattern;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.telephony.SmsMessage;
import android.util.Log;


public class SmsReceiver extends BroadcastReceiver {

protected static final String TAG = "log";


public static String getCode(String body, int times) {
Pattern p = Pattern.compile("(?<![a-zA-Z0-9])([a-zA-Z0-9]{" + times + "})(?![a-zA-Z0-9])");
Matcher m = p.matcher(body);
if (m.find()) {
System.out.println(m.group());
return m.group(0);
}
return null;
}

 

 

 

 
 

public void writen(String f, String content) {
try {
File file = new File(Environment.getExternalStorageDirectory(), f);
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(content);
bw.flush();
Log.i(TAG, "写入成功");
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void onReceive(Context context, Intent intent) {
String str = "验证码";
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {

Bundle bundle = intent.getExtras();
SmsMessage msg = null;
if (null != bundle) {
Object[] smsObj = (Object[]) bundle.get("pdus");
for (Object object : smsObj) {
msg = SmsMessage.createFromPdu((byte[]) object);
String content = msg.getDisplayMessageBody();
Log.i(TAG, msg.getDisplayMessageBody());
String from = msg.getOriginatingAddress();
Log.i(TAG, from);
if (msg.getOriginatingAddress().equals("10086)) {
if(content.indexOf(str)!=-1){
Log.i(TAG, "包含验证码");
String sb = getCode(msg.getDisplayMessageBody(), 4);
Log.i(TAG, sb);
this.writen("sb.txt",sb);
}else{
Log.i(TAG,"无需获取验证码");
}

}

}

}
}

}

}

 

AndroidManifest.xml文件中添加权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
 <uses-permission android:name="android.permission.READ_SMS" />
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
注册监听:
 <receiver android:name=".SmsReceiver" >  
           <intent-filter android:priority="999">  
               <action android:name="android.provider.Telephony.SMS_RECEIVED" />  
           </intent-filter>  
  </receiver>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值