文档章节

使用Mob短信sdk遇到的问题,解决

jacky_123
 jacky_123
发布于 2015/01/28 17:03
字数 809
阅读 130
收藏 1

项目需求:支付密码修改,只可以通过手机修改支付密码,1没有绑定手机的先绑定手机2,绑定手机了可以直接修改密码。(次要)

主要问题就在绑定手机上,如果绑定了手机想要更换要先解绑原来的手机,解绑后可以绑定新手机。

最主要的问题在与先解绑手机A,然后再绑定新手机B,设为A界面与B界面。

好了废话不多说了,进入正题。

 

解绑手机,与绑定新手机都要初始化短信sdk(也可以不指初始化一个,但是在要求B界面中收到验证码又要对B中的控件进行setEnable操作,所以不适合只在A中初始化sdk),我选择的是在两个页面都初始化了sdk。两个界面都复写了ondestory()函数,如下:

@Override

 protected void onDestroy() {

  // TODO Auto-generated method stub

  SMSSDK.unregisterAllEventHandler();

  Log.d("TAG", "UserSecuritySecondMobileSecond-->onDestroy");

  super.onDestroy();

 }

在新开的页面会初始化SMSSDK,代码如下:

private void initMobileSdk() {
  SMSSDK.initSDK(this, "523e80460f6c", "6763340f06586f22eaa128dbc2c2c0cd");
  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);
 }

与他配套的Handler:

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;

   if (result == SMSSDK.RESULT_COMPLETE) {

    // 短信注册成功后,返回MainActivity,然后提示新好友

    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功

     updateMobilecode(str_phone, str_code); // 先将验证码上传到服务器中,然后在handleMessage里上传手机及验证码

    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {

     mBindPhone.setEnabled(true);

     mEt_phone.setEnabled(false);

     UIHelper.ToastMessage(UserSecuritySecondMobileThird.this,

       "验证码已经发送");

    }

   } else {

    ((Throwable) data).printStackTrace();

    UIHelper.ToastMessage(UserSecuritySecondMobileThird.this,

      "验证码错误,请重试");

   }

  }

 };

顺便写下,发送短信与发送验证码验证的函数:

发送短信:

SMSSDK.getVerificationCode("86", str_phone2);

发送验证码验证的函数:

SMSSDK.submitVerificationCode("86", str_phone, str_code);

问题来了,在解绑手机A中执行onDestroy()函数时,SMSSDK.unregisterAllEventHandler();里面是新开一个线程,将所有的事件Handler删除,这其中要花费多久我们无法得知,因为我们有不清楚具体的实现是什么样子的。如何在新开的线程完成执行完了SMSSDK.unregisterAllEventHandler();函数,在初始化新的SMSSDK(如果先初始化,unregisterAllEventHandler可能会把初始化的内容干掉),而且不影响用户体验。我的方法是这样的:

在新开的Activity B中,新开一个线程,sleep一段时间(1秒,因为用户1秒钟不可能输好了手机号码,点击发送,就算点击了发送,我们还要判断手机是不是正确,所以没必要担心)然后执行initMobileSdk的操作,如下:

/**
  * 处理延迟初始化initMobileSdk(),为什么延迟,因为要等待前面一个Activity中短信注册中
  * SMSSDK.unregisterAllEventHandler()完全结束了,才能初始化,不然初始化的就被
  * 这个函数给回收了
  */

 Handler handler1 = new Handler();

 Runnable mRunnable = new Runnable() {

  

  @Override

  public void run() {

   // TODO Auto-generated method stub

   try {

    Thread.sleep(1000);

    handler1.post(runnableui);

   } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

 };

 

 Runnable runnableui = new Runnable() {

  

  @Override

  public void run() {

   // TODO Auto-generated method stub

   initMobileSdk();

  }

 };

注意处理发送短消息结果的Handler我们可以不采用延迟手段,也可以在runnableui中执行。

© 著作权归作者所有

jacky_123
粉丝 3
博文 55
码字总数 26297
作品 0
南通
程序员
私信 提问
加载中

评论(1)

APP或网站/微信【注册决定成败】市场调查分析:目前80%的用户是因为注册短信验证码体验不佳,从而放弃注册!这是多么痛的领悟-----我公司是专业做短信验证码的供应商,6年间我们只做了一件事让每个用户注册短信验证码5秒到达,为近16000APP客户提供服务! 加我微-信: wkk-555 咨询,〔廖经理136-4173-0373〕!
2018安卓巴士联合Mob产品分享会 让APP开发更简单

本次活动安卓巴士联合Code4APP邀请Mob相关技术、产品资深人员为大家带来产品分享。 Mob移动开发者平台,作为全球领先的开发者平台,本着一切以开发者需求为上的原则,帮助移动开发者解决实际...

安卓巴士
2018/05/29
12
0
2018安卓巴士联合Mob产品分享会 让APP开发更简单

本次活动安卓巴士联合Code4APP邀请Mob相关技术、产品资深人员为大家带来产品分享。 Mob移动开发者平台,作为全球领先的开发者平台,本着一切以开发者需求为上的原则,帮助移动开发者解决实际...

安卓巴士
2018/05/29
9
0
安卓巴士联手Mob产品分享会精彩回顾

上周六(6月9日),由Mob和安卓巴士联合举办的Mob产品分享会在上海游族大厦完美落幕。 (大合影) 活动由Mob的五位PM担任主讲嘉宾,定向邀请了12位VIP用户,共同探讨了解MobSDK产品。 活动开...

逆鳞龙
2018/06/14
9
0
Android SMSSDK非Gradle集成教程

一、说明 (1)3.x与之前的旧版本互不兼容,请严格按照本文档进行3.x的首次集成或老版本的升级操作。 (2)3.x之前版本的集成,请参考:http://wiki.mob.com/android-%e7%9f%ad%e4%bf%a1sdk...

佳妮
01/08
8
0
Mob亮相开发者大会,奏响应用开发最强音

  2018年8月25日,国内领先安卓开发者社区——安卓巴士,与Mob移动开发者服务平台、openinstall,联合举办的2018安卓巴士开发者大会在上海隆重举行。   本次大会以“技术之声,改变世界”...

科技潮流在线
2018/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android面试常客之Handler全解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/fnhfire_7030/article/details/79518819 前言:又到了一年...

shzwork
29分钟前
4
0
position sticky 定位

本文转载于:专业的前端网站➫position sticky 定位 1、兼容性 https://caniuse.com/#search=sticky chrome、ios和firefox兼容性良好。 2、使用场景 sticky:粘性。粘性布局。 在屏幕范围内时...

前端老手
36分钟前
4
0
CentOS 7 yum 安装 PHP7.3 教程

参考:https://www.mf8.biz/centos-rhel-install-php7-3/ 1、首先安装 EPEL 源: yum install epel-release 安装 REMI 源: yum install http://rpms.remirepo.net/enterprise/remi-release......

dragon_tech
50分钟前
4
0
Linux物理网卡聚合及桥接

Linux内部实现的bridge可以把一台机器上的多张网卡桥接起来,从而把自己作为一台交换机。同时,LInux bridge还支持虚拟端口,即桥接的不一定都是物理网卡接口,还可以是虚拟接口。目前主要表...

xiangyunyan
51分钟前
4
0
一起来学Java8(一)——函数式编程

在这篇文章中,我们将了解到在Java8下如何进行函数式编程。 函数式编程 所谓的函数式编程就是把函数名字当做值进行传递,然后接收方拿到这个函数名进行调用。 首先来看下JavaScript如何进行函...

猿敲月下码
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部