Android在應用注冊的時候經常要用到短信驗證,通過發短信給用戶,并讓用戶將短信中的驗證碼填到注冊頁面中方能注冊成功。如下圖所示:

獲取到短信如下:

本文是能過第三方平臺掌淘科技來實現免費短信驗證。首先到注冊一個賬號,網址是[http://mob.com/](http://mob.com/);注冊完后就可以得到appkey和appsecret,如下圖:
點擊進入后就能看到自己的appkey和appsecret。接下來就要導入免費短信驗證的sdk,同樣在那個網站上下載。下載完后把文件夾MSMSDK文件導入到eclipse中,把它作為一個library導入到你的工程中,接下來就是代碼的實現。
1.在AndroidMainfest導入權限:
~~~
<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" />
~~~
2.在application中加入如下的activity聲明:
~~~
<activity
android:name="cn.smssdk.SMSSDKUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
~~~
3.實現注冊頁面的xml,如下,主要就是兩個文本框和一個登錄按鈕。
~~~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:paddingLeft="10.0dip"
android:paddingRight="10.0dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30.0dip">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:orientation="vertical"
android:paddingLeft="10.0dip"
android:paddingTop="20.0dip"
android:paddingRight="10.0dip"
android:paddingBottom="20.0dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/table_top_xml">
<EditText
android:id="@+id/register_username"
android:textSize="15.0sp"
android:textColor="#000000"
android:gravity="center_vertical"
android:background="@null"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10.0dip"
android:layout_marginRight="30.0dip"
android:hint="手機號"
android:singleLine="true"
android:layout_centerVertical="true" />
</RelativeLayout>
<RelativeLayout
android:orientation="vertical"
android:paddingLeft="10.0dip"
android:paddingTop="15.0dip"
android:paddingRight="10.0dip"
android:paddingBottom="15.0dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/table_middle_xml">
<EditText
android:id="@+id/register_yanzhengma"
android:textSize="15.0sp"
android:gravity="center_vertical"
android:background="@null"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10.0dip"
android:layout_marginRight="30.0dip"
android:hint="驗證碼"
android:singleLine="true"
android:layout_centerVertical="true" />
<TextView
android:textSize="13.0sp"
android:textColor="#ffd74623"
android:id="@+id/register_getyanzhengma"
android:background="@drawable/btn_register"
android:paddingLeft="10.0dip"
android:paddingTop="5.0dip"
android:paddingRight="10.0dip"
android:paddingBottom="5.0dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="獲取"
android:singleLine="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
</RelativeLayout>
<Button
android:id="@+id/register_ok"
android:layout_width="match_parent"
android:layout_height="50.0dp"
android:layout_marginTop="20dp"
android:background="@drawable/login_try_btn"
android:gravity="center"
android:text="注 冊"
android:textColor="@android:color/white"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
~~~
4.接下來就是在主函數了,
~~~
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
phonEditText=(EditText) findViewById(R.id.register_username);
verEditText=(EditText) findViewById(R.id.register_yanzhengma);
SMSSDK.initSDK(this,APPKEY,APPSECRET);
EventHandler eh=new EventHandler(){
@Override
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
handler.sendMessage(msg);
}
};
SMSSDK.registerEventHandler(eh);
findViewById(R.id.register_getyanzhengma).setOnClickListener(clickListener);
}
~~~
以上SMSSDK.initSDK是引入SMSSDK,APPKEY和APPSECRET寫入你自己的appkey和appsecret。接下來的EventHander主要是獲得SMSSDK的狀態。接下來實現點擊獲取按鈕的監聽事件。
~~~
OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.register_getyanzhengma: //獲取驗證碼
if(!TextUtils.isEmpty(phonEditText.getText().toString())){
SMSSDK.getVerificationCode("86",phonEditText.getText().toString());
}else {
Toast.makeText(MainActivity.this, "電話不能為空", 1).show();
}
break;
case R.id.register_ok:
if(!TextUtils.isEmpty(verEditText.getText().toString())){
SMSSDK.submitVerificationCode("86", phonEditText.getText().toString(), verEditText.getText().toString());
}else {
Toast.makeText(MainActivity.this, "驗證碼不能為空", 1).show();
}
default:
break;
}
}
};
~~~
最后就是判斷短信發送所處的狀態。
~~~
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
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();
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){
Toast.makeText(getApplicationContext(), "驗證碼已經發送", Toast.LENGTH_SHORT).show();
}
} else {
((Throwable) data).printStackTrace();
Toast.makeText(getApplicationContext(), "驗證碼錯誤", Toast.LENGTH_SHORT).show();
}
}
};
~~~
以上的實現方式是通過SMSSDK的接口來實現的,如果有興趣可以細讀SMSSDK里的源碼。在此只是把它實現出來。到此一個簡單的注冊短信驗證就實現了。當然短信的格式修改不了。如果要自定義短信格式,那就需要找收費的咯。
- 前言
- Android底部tab與標題欄相結合
- Android免費獲取短信驗證碼
- android中Handler的源碼分析
- 詳解Fragment的傳值問題
- 詳談gson解析
- android新控件之toolbar,floatingActionButton,SnackBar,CollapsingToolbarLayout
- android自定義控件
- 淺談android的線程池
- Android的消息處理機制,AsyncTask源碼解析
- IPC——android進程間通信
- CoCos2d_android入門所需知道的一切
- Cocos2d_android你所需要知道的一切(下)
- Activity你需要知道的一切
- Activity啟動過程源碼分析
- Data Binding Guide——google官方文檔翻譯(上)
- Data Binding Guide——google官方文檔翻譯(下)
- android TextView實現跑馬燈效果
- android中生成excel
- Volley源碼解析
- LayoutInflater源碼解析
- android發送郵件
- android測試工具MonkeyRunner--google官網翻譯
- android View繪制源碼分析
- Android中Window添加View的底層原理
- 仿美團商品選購下拉菜單實現