Android studio 通過獲取驗證碼使用者登陸成功
1.主要利用了mob網站上的SMSSDK簡訊驗證功能,實現驗證碼的獲取,進而得到登陸。
登入平臺,註冊賬號獲取App Key 和App Secret (安利一個平臺http://dashboard.mob.com/ 直接註冊,建立app後就有App Key和App Secret 了),在你的應用中新增SMSSDK簡訊登入功能
下載版本-
SMS For Android Eclipse v3.1.1
網址:(http://www.mob.com/downloadDetail/SMS/android)
現在沒有Android Studio版本的了,可以利用此版本整合,下載後進行解壓縮
因為是最新版本還是其他原因,裡面沒有aar包,aar包根據網上資料是說用於直接用他們網站提供的ui介面,在這裡我們打算自己寫一個介面,所以,不需要aar包
****************************************************************************************************************************
****************************************************************************************************************************
2.jar包的匯入
將這四個包複製到Android studio 中app下的lips 中,然後我們開始在build.gradle 新增依賴,注意,在Android studio中有兩個build.gradle,我們是在app下的,不是工程下的。
repositories{
flatDir{
dirs 'libs'
}
}
因為你的資料夾下沒有aar包,因此,無需下面配置dependencies {
...//你的其他依賴
}
上面檔案中如果有implementation fileTree(include: ['*.jar'], dir: 'libs')
就不需要就不用管了,如果沒有的話,你需要將你的jar包新增依賴在dependencies中天上這句話,一般這句話都有。
****************************************************************************************************************************
****************************************************************************************************************************
3.配置許可權+節點AndroidManifest.xml()
---3.1在AndroidManifest.xml中新增
<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.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
---3.2新增以下Activity:
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
---3.3在Application節點下新增以下屬性:
android:name="com.mob.MobApplication"
****************************************************************************************************************************
****************************************************************************************************************************
4初始化
在Application節點下新增以下meta-data:
<!-- 通過AndroidManifest配置AppKey和AppSecret,如果你選擇通過程式碼配置,則不需要配置以下meta-data -->
<meta-data android:name="Mob-AppKey" android:value="你的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
也可以
SMSSDK.initSDK(this,"Mob官網註冊的key","Mob官網註冊的secret");
都一樣的兩種方式
****************************************************************************************************************************
****************************************************************************************************************************
5.開始加程式碼了
activity_login.xml--(UI 介面)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myapp.Baseactivity.LoginActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="手機快捷登陸"
android:textColor="@color/back"
android:textSize="32px"
android:layout_marginLeft="42dp"
android:layout_marginTop="30dp"/>
<EditText
android:id="@+id/ed_code"
android:layout_width="190dp"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/ed_phone"
android:layout_below="@+id/ed_phone"
android:hint="@string/et_ver"
android:inputType="number" />
<EditText
android:id="@+id/ed_phone"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_below="@+id/ed_password"
android:layout_centerHorizontal="true"
android:layout_marginTop="130dp"
android:hint="@string/et_phone"
tools:layout_editor_absoluteX="55dp"
tools:layout_editor_absoluteY="52dp"
android:inputType="number"/>
<Button
android:id="@+id/btn_getcord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/ed_code"
android:layout_alignEnd="@+id/ed_phone"
android:text="@string/get_ver"
tools:layout_editor_absoluteX="259dp"
tools:layout_editor_absoluteY="98dp"
android:background="@color/blue"/>
<EditText
android:id="@+id/ed_password"
android:layout_width="300dp"
android:layout_height="0dp"
android:hint="@string/set_password"
tools:layout_editor_absoluteX="55dp"
tools:layout_editor_absoluteY="145dp" />
<Button
android:id="@+id/bt_login"
android:layout_width="300dp"
android:layout_height="45dp"
android:layout_alignStart="@+id/ed_code"
android:layout_centerVertical="true"
android:text="登陸"
tools:layout_editor_absoluteX="75dp"
tools:layout_editor_absoluteY="249dp"
android:background="@color/blue"/>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/bt_login"
android:layout_below="@+id/bt_login"
android:text="@string/yes"
android:textSize="10sp" />
<ImageButton
android:id="@+id/wxlogin"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_above="@+id/textView"
android:layout_centerHorizontal="true"
android:background="@drawable/wx" />
<TextView
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignEnd="@+id/ed_password"
android:layout_alignParentBottom="true"
android:layout_alignStart="@+id/wxlogin"
android:layout_marginBottom="24dp"
android:text="微信登陸"
android:id="@+id/textView" />
</RelativeLayout>
LoginActivity.java
package com.example.myapp.Baseactivity;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import com.example.myapp.R;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edit_phone;
private EditText edit_cord;
//private TextView now;
private Button bt_getcord;
private Button bt_login;
private String phone_number;
private String cord_number;
private ImageButton wxlogin;
EventHandler eventHandler;
private int time=60;
private boolean flag=true;
//*******************************************************************************
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//初始化操作
initview();
eventHandler = new EventHandler() {
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(eventHandler);//註冊簡訊回撥(記得銷燬,避免洩露記憶體)*/
}
private void initview() {
edit_phone=(EditText)findViewById(R.id.ed_phone); //你的手機號
edit_cord=(EditText)findViewById(R.id.ed_code);//你的驗證碼
bt_getcord=(Button)findViewById(R.id.btn_getcord);//獲取驗證碼按鈕
bt_login = (Button)findViewById(R.id.bt_login);//登陸按鈕
wxlogin = (ImageButton)findViewById(R.id.wxlogin);//微信登入按鈕
//三個觸發事件
bt_getcord.setOnClickListener(this);//驗證碼的觸發事件
bt_login.setOnClickListener(this);
wxlogin.setOnClickListener(this);
}
protected void onDestroy() {//銷燬
super.onDestroy();
SMSSDK.unregisterEventHandler(eventHandler);
}
/**
* 使用Handler來分發Message物件到主執行緒中,處理事件
*/
Handler handler=new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int event=msg.arg1;
int result=msg.arg2;
Object data=msg.obj;
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {//獲取驗證碼成功
if(result == SMSSDK.RESULT_COMPLETE) {
//回撥完成
boolean smart = (Boolean)data;
if(smart) {
Toast.makeText(getApplicationContext(),"該手機號已經註冊過,請重新輸入",
Toast.LENGTH_LONG).show();
edit_phone.requestFocus();//焦點
return;
}
}
}
//回撥完成
if (result==SMSSDK.RESULT_COMPLETE){
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交驗證碼成功
Toast.makeText(getApplicationContext(), "驗證碼輸入正確",
Toast.LENGTH_LONG).show();
}
}else {//其他出錯情況
if(flag)
{
bt_getcord.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(),"驗證碼獲取失敗請重新獲取", Toast.LENGTH_LONG).show();
edit_phone.requestFocus();
}
else
{
Toast.makeText(getApplicationContext(),"驗證碼輸入錯誤", Toast.LENGTH_LONG).show();
}
}
}
};
//按鈕點選事件
@Override
public void onClick(View v) {
/*String phone_number=edit_phone.getText().toString();//1
String cord_number=bt_getcord.getText().toString().trim();//1 */
switch (v.getId()){
case R.id.btn_getcord://獲取驗證碼的ID
if(judPhone())//去掉左右空格獲取字串,是正確的手機號
{
SMSSDK.getVerificationCode("86",phone_number);//獲取你的手機號的驗證碼
edit_cord.requestFocus();//判斷是否獲得焦點
}
break;
// 獲取後要提交你的驗證碼以判斷是否正確,並登陸成功
case R.id.bt_login://登陸頁面的ID
if(judCord())//判斷驗證碼
SMSSDK.submitVerificationCode("86",phone_number,cord_number);//提交手機號和驗證碼
startActivity(new Intent(this,MainActivity.class));
flag=false;
break;
case R.id.wxlogin://跳轉到微信登陸
break;
}
}
private boolean judPhone() {//判斷手機號是否正確
//不正確的情況
if(TextUtils.isEmpty(edit_phone.getText().toString().trim()))//對於字串處理Android為我們提供了一個簡單實用的TextUtils類,如果處理比較簡單的內容不用去思考正則表示式不妨試試這個在android.text.TextUtils的類,主要的功能如下:
//是否為空字元 boolean android.text.TextUtils.isEmpty(CharSequence str)
{
Toast.makeText(LoginActivity.this,"請輸入您的電話號碼",Toast.LENGTH_LONG).show();
edit_phone.requestFocus();//設定是否獲得焦點。若有requestFocus()被呼叫時,後者優先處理。注意在表單中想設定某一個如EditText獲取焦點,光設定這個是不行的,需要將這個EditText前面的focusable都設定為false才行。
return false;
}
else if(edit_phone.getText().toString().trim().length()!=11)
{
Toast.makeText(LoginActivity.this,"您的電話號碼位數不正確",Toast.LENGTH_LONG).show();
edit_phone.requestFocus();
return false;
}
//正確的情況
else
{
phone_number=edit_phone.getText().toString().trim();
String num="[1][358]\\d{9}";
if(phone_number.matches(num))
return true;
else
{
Toast.makeText(LoginActivity.this,"請輸入正確的手機號碼",Toast.LENGTH_LONG).show();
return false;
}
}
}
private boolean judCord() {//判斷驗證碼是否正確
judPhone();//先執行驗證手機號碼正確與否
if(TextUtils.isEmpty(edit_cord.getText().toString().trim()))//驗證碼
{
Toast.makeText(LoginActivity.this,"請輸入您的驗證碼",Toast.LENGTH_LONG).show();
edit_cord.requestFocus();//聚集焦點
return false;
}
else if(edit_cord.getText().toString().trim().length()!=4)
{
Toast.makeText(LoginActivity.this,"您的驗證碼位數不正確",Toast.LENGTH_LONG).show();
edit_cord.requestFocus();
return false;
}
else
{
cord_number=edit_cord.getText().toString().trim();
return true;
}
}
}
介面