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; } } }
界面