1. 案例概述
此案例主要是短信获取验证码的使用。当应用处于登录注册模块时常常会用到短信验证码这一服务功能。
Demo运行效果如下:
2. 实现步骤
在实现这一功能之前,先简单介绍一个平台:Mob平台。
Mob具有第三方登录分享、短信验证、消息推送等功能,适合于个人开发者测试使用。
主要实现步骤:
1.注册Mob账号,进入后台。
2.获取mob的appkey。( Mob用户后台使用指南)
3.点击“文档中心”,找到“SMSSDK/Android集成文档”。
4.参考Mob文档中心的产品文档/Android/快速集成,进行配置和初始化的操作。
3.关于配置
1.在配置gradle时,切换到Project根目录的build.gradle(注意这里的build.gradle不是app里的),在buildscrip–>dependencies 模块下面添加 classpath ‘com.mob.sdk:MobSDK:+’
build.gradle
配置文件1.png
2、在使用SMSSDK模块的app中的build.gradle中,添加MobSDK插件和扩展。
app中的build.gradle在android{…… }中的buildTypes{……}下面添加以下代码:
MobSDK在android{……}最上端添加:
apply plugin最后,点击Sync Now进行更新,就配置好啦!
4.关于界面
界面只有有两个:短信验证码测试界面和登录界面。
activity_login
<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"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.testsms.LoginActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:gravity="center_vertical"
android:text="测试后显示界面"
android:textSize="25sp"
android:textColor="@color/btnCodeColor"/>
</RelativeLayout>
activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
app:cardCornerRadius="5dp"
app:cardElevation="3dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/ed_phone"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/register_edittext_top_radius"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:hint="请输入手机号码"
android:paddingLeft="8dp"
android:singleLine="true"
android:textColor="#000000"
android:textColorHint="@color/register_hint_text_color"
android:textCursorDrawable="@null"
android:textSize="14sp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/divider_line_color"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center_vertical">
<EditText
android:id="@+id/ed_code"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity = "center_horizontal"
android:background="@drawable/register_edittext_bottom_radius"
android:drawablePadding="10dp"
android:hint="请输入验证码"
android:inputType="textPassword"
android:paddingLeft="8dp"
android:singleLine="true"
android:textColor="#000000"
android:textColorHint="@color/register_hint_text_color"
android:textCursorDrawable="@null"
android:textSize="14sp"/>
<Button
android:id="@+id/btn_getSMSCode"
android:onClick="getSMSCode"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:textColor="@android:color/white"
android:text="获取验证码"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="8dp"
android:background="@drawable/register_btn_getcode"/>
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
<Button
android:id="@+id/btn_register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:layout_marginTop="15dp"
android:background="@drawable/register_btn_getcode"
android:text="测试验证码"
android:textColor="@android:color/white"
android:onClick="compareSMSCode"
android:textSize="18sp"/>
</LinearLayout>
这其中涉及到CardView库的应用。
添加CardView库的方法:
右击项目弹出Opening Moudle Settings/Dependencies/在+中选择Library Dependence/搜索cardview找到其库进行添加。
5.关于逻辑程序
MobSDK初始化
public class MyApplication extends MobApplication {
@Override
public void onCreate() {
super.onCreate();
MobSDK.init(this);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private EditText ed_phone;
private EditText ed_code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed_phone = (EditText) findViewById(R.id.ed_phone);
ed_code = (EditText) findViewById(R.id.ed_code);
//初始化短信模块
EventHandler eventHandler = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
// afterEvent会在子线程被调用,因此如果后续有UI相关操作,需要将数据发送到UI线程
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
new Handler(Looper.getMainLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
Log.e("handleMessage: ", data == null ? "" : data.toString());
if (result == SMSSDK.RESULT_COMPLETE) {
// TODO 处理成功得到验证码的结果
// 请注意,此时只是完成了发送验证码的请求,验证码短信还需要几秒钟之后才送达
Toast.makeText(MainActivity.this, "验证码已发送", Toast.LENGTH_SHORT).show();
} else {
// TODO 处理错误的结果
((Throwable) data).printStackTrace();
Toast.makeText(MainActivity.this, "验证码发送失败", Toast.LENGTH_SHORT).show();
}
} else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
Log.e("handleMessage: ", data == null ? "" : data.toString());
if (result == SMSSDK.RESULT_COMPLETE) {
// TODO 处理验证码验证通过的结果
Toast.makeText(MainActivity.this, "验证码验证成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,LoginActivity.class);
startActivity(intent);
} else {
// TODO 处理错误的结果
((Throwable) data).printStackTrace();
Toast.makeText(MainActivity.this, "验证码验证失败", Toast.LENGTH_SHORT).show();
}
}
// TODO 其他接口的返回结果也类似,根据event判断当前数据属于哪个接口
return false;
}
}).sendMessage(msg);
}
};
SMSSDK.registerEventHandler(eventHandler);
}
/**
* 获取验证码
*
* @param view
*/
public void getSMSCode(View view) {
if (ed_phone.getText().toString().length() == 0 && ed_phone.getText().toString().length() != 11) {
Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show();
return;
}
SMSSDK.getVerificationCode("86", ed_phone.getText().toString());
}
/**
* 验证验证码
*
* @param view
*/
public void compareSMSCode(View view) {
if (ed_phone.getText().toString().length() == 0 && ed_phone.getText().toString().length() != 11) {
Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show();
return;
}
if (ed_phone.getText().toString().length() == 0) {
Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show();
return;
}
SMSSDK.submitVerificationCode("86", ed_phone.getText().toString(), ed_code.getText().toString());
}
}
LoginMainActivity暂不用编写。
权限设置
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
网友评论