怎么让这个手机iphone自动填写验证码短信验证码

Android获取短信验证码实例教程及自动填写-android100学习网
Android获取短信验证码实例教程及自动填写
本文我们研究一下关于Android获取短信验证码的工作原理,由于短信验证码用来保护个人信息的安全性,在手机app应用非常广范,我们可以认真的学习一下。
短信验证需要服务器端生成一个验证码,然后发...
本文我们研究一下关于Android获取短信验证码的工作原理,由于短信验证码用来保护个人信息的安全性,在手机app应用非常广范,我们可以认真的学习一下。
短信验证需要服务器端生成一个验证码,然后发送到用户输入的手机上,这个过程需要服务器主动向客户发送验证短信,所以这是就需要一个移动或联通的发送短息接口,由于本人目前尚处于学生阶段,没有获得这个接口的权限,所以我就选择了借助网上的移动开发服务平台,来完成这个功能的实现,这里我借用的平台是:/,大家可以关注一下,这个平台为我们开发移动应用提供了很好的技术指导,可以大大缩短我们的开发周期。废话不多说,下面开始我们今天的重点。官方为我们提供了两种设计方式:第一种调用内部GUI实现;另一种通过自定义GUI实现,对于第一种方式,我就不再多讲,因为官方文档提供了很详细的实行步骤,大家只需要按照上面的步骤去实现即可,没有难度。本篇我将带领大家通过自定义GUI实现短信验证功能。首先开发之前你可以先查阅一下官方提供的无GUI
API,然后下载一下官方提供的dome,做好这些工作之后,我们就可以开始我们的设计了。  1、将demo中的libs下的SMSSDK-1.1.5.jar和armeabi文件夹拷贝到我们项目的libs目录下,这是官方提供的类库jar包。  2、在AndroidManifest.xml文件添加权限和声明Action:&?xml version="1.0" encoding="utf-8"?&&manifest xmlns:android="/apk/res/android"
package="com.example.android_sms"
android:versionCode="1"
android:versionName="1.0" &
android:minSdkVersion="8"
android:targetSdkVersion="18" /&
&uses-permission android:name="android.permission.READ_CONTACTS" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.RECEIVE_SMS" /&
&uses-permission android:name="android.permission.GET_TASKS" /&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" &
android:name="com.example.android_sms.MainActivity"
android:label="@string/app_name" &
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
android:name="cn.smssdk.SMSSDKUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" /&
&/application&&/manifest&  3、设计我们的布局文件:&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" &
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="短信验证"
android:textColor="#00ffaa"
android:textSize="20dp" /&
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:text="手机号:" /&
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_toRightOf="@+id/textView1"
android:maxLength="11"
android:ems="11"
android:inputType="phone" &
&requestFocus /&
&/EditText&
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_marginTop="40dp"
android:layout_below="@+id/phone"
android:text="验证码:"/&
android:id="@+id/cord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_alignBaseline="@+id/textView3"
android:layout_alignBottom="@+id/textView3"
android:layout_alignLeft="@+id/phone"
android:ems="4"
android:maxLength="4"
android:inputType="phone" /&
android:id="@+id/getcord"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/cord"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/cord"
android:visibility="visible"
android:text="获取验证码" /&
android:id="@+id/savecord"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/cord"
android:layout_margin="20dp"
android:text="验证" /&
android:id="@+id/now"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/savecord"
android:layout_toRightOf="@+id/cord"
android:gravity="center_horizontal"
android:visibility="gone"
android:text="提示信息"
android:textColor="#aaaaaa" /&&/RelativeLayout&  4、我们的MainActivity:/** * 自定义GUI短信验证 * @time: 日 */public class MainActivity extends Activity implements OnClickListener{
private EditT
private EditT
private TextV
private Button getC
private Button saveC
private String iP
private String iC
private int time = 60;
private boolean flag =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
init();     SMSSDK.initSDK(this, "&您的appkey&", "&您的appsecret&");
EventHandler eh=new EventHandler(){
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.arg1 =
msg.arg2 =
handler.sendMessage(msg);
SMSSDK.registerEventHandler(eh);
private void init() {
phone = (EditText) findViewById(R.id.phone);
cord = (EditText) findViewById(R.id.cord);
now = (TextView) findViewById(R.id.now);
getCord = (Button) findViewById(R.id.getcord);
saveCord = (Button) findViewById(R.id.savecord);
getCord.setOnClickListener(this);
saveCord.setOnClickListener(this);
public void onClick(View v) {
switch (v.getId()) {
case R.id.getcord:
if(!TextUtils.isEmpty(phone.getText().toString().trim())){
if(phone.getText().toString().trim().length()==11){
iPhone = phone.getText().toString().trim();
SMSSDK.getVerificationCode("86",iPhone);
cord.requestFocus();
getCord.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "请输入完整电话号码", Toast.LENGTH_LONG).show();
phone.requestFocus();
Toast.makeText(MainActivity.this, "请输入您的电话号码", Toast.LENGTH_LONG).show();
phone.requestFocus();
case R.id.savecord:
if(!TextUtils.isEmpty(cord.getText().toString().trim())){
if(cord.getText().toString().trim().length()==4){
iCord = cord.getText().toString().trim();
SMSSDK.submitVerificationCode("86", iPhone, iCord);
Toast.makeText(MainActivity.this, "请输入完整验证码", Toast.LENGTH_LONG).show();
cord.requestFocus();
Toast.makeText(MainActivity.this, "请输入验证码", Toast.LENGTH_LONG).show();
cord.requestFocus();
//验证码送成功后提示文字
private void reminderText() {
now.setVisibility(View.VISIBLE);
handlerText.sendEmptyMessageDelayed(1, 1000);
Handler handlerText =new Handler(){
public void handleMessage(Message msg) {
if(msg.what==1){
if(time&0){
now.setText("验证码已发送"+time+"秒");
handlerText.sendEmptyMessageDelayed(1, 1000);
now.setText("提示信息");
time = 60;
now.setVisibility(View.GONE);
getCord.setVisibility(View.VISIBLE);
cord.setText("");
now.setText("提示信息");
time = 60;
now.setVisibility(View.GONE);
getCord.setVisibility(View.VISIBLE);
Handler handler=new Handler(){
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.
Log.e("event", "event="+event);
if (result == SMSSDK.RESULT_COMPLETE) {
//短信注册成功后,返回MainActivity,然后提示新好友
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功,验证通过
Toast.makeText(getApplicationContext(), "验证码校验成功", Toast.LENGTH_SHORT).show();
handlerText.sendEmptyMessage(2);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){//服务器验证码发送成功
reminderText();
Toast.makeText(getApplicationContext(), "验证码已经发送", Toast.LENGTH_SHORT).show();
}else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){//返回支持发送验证码的国家列表
Toast.makeText(getApplicationContext(), "获取国家列表成功", Toast.LENGTH_SHORT).show();
getCord.setVisibility(View.VISIBLE);
Toast.makeText(MainActivity.this, "验证码获取失败,请重新获取", Toast.LENGTH_SHORT).show();
phone.requestFocus();
((Throwable) data).printStackTrace();
int resId = getStringRes(MainActivity.this, "smssdk_network_error");
Toast.makeText(MainActivity.this, "验证码错误", Toast.LENGTH_SHORT).show();
cord.selectAll();
if (resId & 0) {
Toast.makeText(MainActivity.this, resId, Toast.LENGTH_SHORT).show();
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterAllEventHandler();
}}  注:appkey和appsecret:在/注册一个账号后,创建一个发送短信的应用,系统会自动为生成appkey和appsecret    handlerText是我自定义设计的Handker对象,用于当服务器发送验证码后,提醒用户注意。  最后附图两张,供大家参考:
android获取短信验证码并自动填写的实现现在的应用在注册登录或者修改密码中都用到了短信验证码,那在android中是如何实现获取短信验证码并自动填写的呢?首先,需要要在manifest中注册接收和读取短信的权限:
&uses-permission android:name="android.permission.RECEIVE_SMS"&&/uses-permission&
&uses-permission android:name="android.permission.READ_SMS"/&实现一个广播SMSBroadcastReceiver来监听短信:package com.example.import java.text.SimpleDateFimport java.util.Dimport android.content.BroadcastRimport android.content.Cimport android.content.Iimport android.telephony.SmsM/** * 短信监听 * @author
* */public class SMSBroadcastReceiver extends BroadcastReceiver {
private static MessageListener mMessageL
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
public SMSBroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for(Object pdu:pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte [])pdu);
String sender = smsMessage.getDisplayOriginatingAddress();
//短信内容
String content = smsMessage.getDisplayMessageBody();
long date = smsMessage.getTimestampMillis();
Date tiemDate = new Date(date);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = simpleDateFormat.format(tiemDate);
//过滤不需要读取的短信的发送号码
if ("+3".equals(sender)) {
mMessageListener.onReceived(content);
abortBroadcast();
//回调接口
public interface MessageListener {
public void onReceived(String message);
public void setOnReceivedMessageListener(MessageListener messageListener) {
this.mMessageListener = messageL
}}在需要填写验证码的Activity中,生产SMSBroadcastReceiver的实例,实现onReceived的回调接口。为了节约系统资源,我们使用动态注册注销广播的方法。package com.example.import com.example.receive.SMSBroadcastRimport android.os.Bimport android.app.Aimport android.content.IntentFimport android.view.Mimport android.widget.EditTpublic class MainActivity extends Activity {
private EditText edtP
private SMSBroadcastReceiver mSMSBroadcastR
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtPassword = (EditText) findViewById(R.id.password);
protected void onStart() {
super.onStart();
//生成广播处理
mSMSBroadcastReceiver = new SMSBroadcastReceiver();
//实例化过滤器并设置要过滤的广播
IntentFilter intentFilter = new IntentFilter(ACTION);
intentFilter.setPriority(Integer.MAX_VALUE);
//注册广播
this.registerReceiver(mSMSBroadcastReceiver, intentFilter);
mSMSBroadcastReceiver.setOnReceivedMessageListener(new SMSBroadcastReceiver.MessageListener() {
public void onReceived(String message) {
edtPassword.setText(message);
protected void onDestroy() {
super.onDestroy();
//注销短信监听广播
this.unregisterReceiver(mSMSBroadcastReceiver);短信验证码收发软件
现在几乎到哪里注册个账号都是需要手机号的,相信有很多人和小编一样,都不愿意随随便便泄露自己的手机号。于是,一类名为短信验证码收发的平台出现了,有了它们,你不需要用自己的手机号进行注册,有效的防止个人信息泄露。小编这里免费提供一些虚拟手机接收验证码的软件,其实他们还可以用于网赚,个中优势,自行挖掘!
V1.5官方版
恩格会计软件是一款非常好用的会计软件,恩格会计软件采用PHP+MySQL开发,可应用于局域网、广域网,不限账套和用户数量,适用于中小企业会计核算。..
1.0绿色最新版
中文\295KB
很所用户在使用电脑和网络进行写经验时,经常要从网上下载一些图片进行配图,需要将图片文件按顺序编号,因此就需要批量修改文件名。文件MD5批量修改工具就能帮助你轻松的批量修改文件名,方便你的修改,欢迎下载!..
V1.0 中文最新版
中文\67.6M
好搭档试题库管理系统是一款功能强大的题库管理软件,为用户提供便捷的题库管理,支持批量试卷一键导入,快速便捷,欢迎下载!..
12.1.6829.0 绿色中文版
专为TeamViewer用户打造的方便快速进入会议和演示的应用,TeamViewerQuickJoin不用安装,不用管理员权限,下载后输入会议id和姓名就能快速加入会议,东坡小编附上的是TeamViewerQuickJoin官网绿色版!..
3.1 官方绿色版
中文\31.2M
沃伦线官网打造的一款期货分析软件,沃伦线期货版软件需要注册才能使用,用户可通过沃伦线指标中的红绿均线和信号做单,帮助投资者更简单方便的做单!..
2.0 官网最新版
中文\22.4M
我们在很多网站上注册时,都需要输入手机号来获取验证码,这样很容易泄漏个人隐私,小编带来的快码验证码平台客户端是一个无需手机号的验证码接收平台,它速度快,全自动接收,有需要的欢迎下载!..
绿色免费版
中文\488KB
这是我们为大家带来的一个电脑日历软件,方便大家在电脑上面查看最新最近的日期,了解各种节假日农历日历在线查询,非常的方便,有需要的可以来下载!..
5.2.2 官方最新版
中文\46.0M
云之家桌面端,一款帮助你分享、共享自己的文档、文件夹等方面的内容,实用、方便,让你办公效率大大地提高,欢迎有需要的朋友前来东坡下载使用。
云之家桌面端功能介绍一、知识共享功能
知识中心:分享有价值文档..
3.0 最新免费版【刷学币】
中文\723KB
阿凡题邀请好友注册就可以得学币,学币可以自由兑换各种实物、Q币等虚拟货币奖励。如果你想快速赚足学币,刷邀请是必须的!小编免费为大家提供阿凡题全自动注册刷邀请软件,原理就是利用短信验证码平台实现自动注册刷..
2.0 绿色版
很多网赚平台都需要手机来接收验证码,有些朋友可能不想自己的号码信息被暴露,那么可以用这款天码验证码平台软件,它能快速、安全、稳定的接收手机验证码,全自动接收,更便捷,更快速,网站账号注册一网打尽!..
1.0 官网最新客户端
现在很多短信接码平台都被封了,小编特意带来一款还真正能用的短信接码平台――草码验证码平台客户端,它将各网站的账号注册、验证码接收、验证、解封为一体,功能很强大。..
1.185 绿色最新版
现在很多平台的接码和验证码平台都被关闭了,小编特意带来了久码平台客户端,它是一个手机接码平台,如今此平台还可使用,不过大家都懂的管制比较多,请低调使用!..
1.6.2.0 绿色版
有许多的朋友会遇到手机越来越卡,但是要重装手机的系统,不知道怎么装,现在小编我帮你找到一款最新的小苹果一键系统重装让你没有烦恼。..
1.0 官网客户端
很多网赚项目都需要自己手机号进行接收验证码,有些朋友不想用自己手机就可以利用e码验证码平台这种专门接收手机验证码的平台,虽说要收费,但还是有回报的,小编这里带来了e码验证码平台用户端下载。..
免费移动版
中文\378.5M
红米note增强版想必很多的人都知道的,现在为大家带来的是最新的红米note增强版刷机包,如果大家的红米note增强版手机出现变砖的情况的话,那么这个包就可以帮助到你!..
2.0 免费版
中文\223KB
最近装逼非常的火,但是他们有的仅仅只是装逼的图片,并不是真正的进行了更改,今天东坡小编为大家带来了一款装逼利器一键修改微信和QQ健康运动步数,让你能够随意进行更改运动步数,不管是微信的还是qq的都可以。
1.2.1.205 最新破解版
中文\32.3M
好卓手游神器,大屏幕、省电量、零流量、操作爽的手游神器。让你一次玩个够,玩的爽,支持离线操作,不需要流量也可以玩,国内外超过500万的游戏任你选择!好卓手游神器介绍好卓手游神器是目前由好卓官网专门推出又推..实现短信监听要用到广播,这里我在Service里面注册这个广播
在activity里面启动service
intent = new Intent(MainActivity.this, SmsService.class);
intent.putExtra("cmd", 1);
startService(intent);
接下来看 service
在service的onCreate方法中 通过startForeground &让服务前台运行
在&onStartCommand方法中 接受到 activity 启动监听的指令,注册接收者
要注意优先级要尽量设高, Action为
android.provider.Telephony.SMS_RECEIVED
在广播接受者的&onReceive方法 &9-19行 取出需要的短信信息
拿到短信内容后,就可以进行验证码匹配
举两个验证码短信例子
【百度】您在百度开发者中心进行的手机验证的验证码为:313253,请输入后进行验证,谢谢![百度开发者中心]
【哔哩哔哩】951422 为你的手机绑定验证码,请在5分钟内完成手机绑定。如非本人操作,请忽略或回复T退订。
通常手机接受到的验证码都是 4位或者6位的纯数字
可以用 &\d{4,6}(?!\d) &&, 红色部分 表示 4到6位的数字,粉色表示后面不能为数字,其实这个可有可无
如果遇到的是 数字字母混合的
可以用&[A-Za-z0-9]{4,}(?![A-Za-z0-9]) &&红色部分表示符合 A到Z a到z 0到9的这个类型 的字符,粉色表示四位以上 ,后面同上
没有使用\w 是因为\w 还可以代表汉字
对于不同的短信验证码模板,肯定有不同的方法,我写的只是一种思路,不可能所有都适用,如果收到一条国外的验证码短信,就不是上面那么简单了
1 public class SmsService extends Service {
private NotificationM
public static NotificationCompat.B
private BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
SmsMessage msg = null;
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
for (Object p : pdusObj) {
msg = SmsMessage.createFromPdu((byte[]) p);
String msgTxt = msg.getMessageBody();//得到消息的内容
Date date = new Date(msg.getTimestampMillis());//时间
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String receiveTime = format.format(date);
String senderNumber = msg.getOriginatingAddress();
//Toast.makeText(context, "发送人:" + senderNumber + "
短信内容:" + msgTxt + "接受时间:" + receiveTime, Toast.LENGTH_LONG).show();
\d{4,6}(?!\d)
// [A-Za-z0-9]{4,}(?![A-Za-z0-9])
Pattern pile("[A-Za-z0-9]{4,}(?![A-Za-z0-9])");
Matcher matcher=pattern.matcher(msgTxt);
if (matcher.find()){
String code=matcher.group(0);
Toast.makeText(context,"验证码是 "+code,Toast.LENGTH_LONG).show();
context.sendBroadcast(new Intent().setAction("yzm").putExtra("code",code));
createNotification(code);
private void createNotification(String code) {
NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setAutoCancel(true);
builder.setContentTitle("收到验证码 "+code);
Intent[] intents = new Intent[2];
intents[0]=Intent.makeRestartActivityTask(new ComponentName(this,MainActivity.class));
intents[1]=new Intent(this,CodeActivity.class);
intents[1].putExtra("code",code);
PendingIntent pendingIntent = PendingIntent.getActivities(this, 0, intents, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
Notification notification = builder.build();
manger.notify(666, notification);
public IBinder onBind(Intent intent) {
return null;
public void onCreate() {
super.onCreate();
manger = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setAutoCancel(true);
builder.setContentTitle("sms listening");
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
builder.setContentIntent(pendingIntent);
Notification notification = builder.build();
//manger.notify(333, notification);
startForeground(333, notification);
public int onStartCommand(Intent intent, int flags, int startId) {
int i = intent.getExtras().getInt("cmd");
if (1 == i) {
initReceiver();
stopForeground(true);
return super.onStartCommand(intent, flags, startId);
private void initReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.setPriority(1000);
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver, intentFilter);
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
stopForeground(true);
最后拿到验证码之后,从service里面发送广播,activity里面注册接收者,拿到验证码,填充给&EditText,当然也可以用EventBus
private BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case "yzm":
editText.setText(intent.getExtras().getString("code"));
如果想停止service,应该在service的onDestroy方法中
unregisterReceiver & &注销短信接收者
stopForeground & & &停止服务前台运行
正则学习 & && &
阅读(...) 评论()}

我要回帖

更多关于 手机验证码自动填写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信