> >

Android 短信SDK操作回调

注册回调:

SMSSDK.registerEventHandler(EventHandler);

其中的EventHandler即为操作回调。它包括4个方法,分别为:

public void onRegister();
public void beforeEvent(int event, Object data);
public void afterEvent(int event, int result, Object data);
public void onUnregister();

其中onRegister在回调对象注册的时候被触发。beforeEvent在操作执行前被触发,其参数event表示操作的类型,data是从外部传入的数据。afterEvent在操作结束时被触发,同样具备event和data参数,但是data是事件操作结果,其具体取值根据参数result而定。result是操作结果,为SMSSDK.RESULT_COMPLETE表示操作成功,为SMSSDK.RESULT_ERROR表示操作失败。

1)   当result=SMSSDK.RESULT_ERROR,则data的类型为Throwable;如果服务器有返回错误码,那么这个Throwable的message就存放着服务器返回的json数据,你可以从中读取相关信息。示例如下:

// 根据服务器返回的网络错误,给toast提示
try {
     Throwable throwable = (Throwable) data;
     throwable.printStackTrace();
     JSONObject object = new JSONObject(throwable.getMessage());
     String des = object.optString("detail");//错误描述
     int status = object.optInt("status");//错误代码
     if (status > 0 && !TextUtils.isEmpty(des)) {
	Toast.makeText(activity, des, Toast.LENGTH_SHORT).show();
	return;
     }
} catch (Exception e) {
     //do something							
}

 

2)   当result=SMSSDK.RESULT_COMPLETE,则data的类型如下表所示。onUnregister在被反注册的时候被触发。

EVENT DATA类型 说明
EVENT_GET_SUPPORTED_COUNTRIES ArrayList<HashMap<String,Object>> 返回支持发送验证码的国家列表
EVENT_GET_VERIFICATION_CODE Boolean true为智能验证,false为普通下发短信
EVENT_SUBMIT_VERIFICATION_CODE HashMap<String,Object> 校验验证码,返回校验的手机和国家代码
EVENT_GET_CONTACTS ArrayList<HashMap<String,Object>> 获取手机内部的通信录列表
EVENT_SUBMIT_USER_INFO null 提交应用内的用户资料
EVENT_GET_FRIENDS_IN_APP ArrayList<HashMap<String,Object>> 获取手机通信录在当前应用内的用户列表
EVENT_GET_VOICE_VERIFICATION_CODE null 请求发送语音验证码,无返回

  短信SDK采用“广播”的方式发送操作结果。这就是说,每次调用registerEventHandler都会设置一个新的EventHandler到SDK内部,当事件发生时,这些注册进来的EventHandler都能收到信息而不会发生“后者替换前者”的问题。为了避免EventHandler注册后不再使用而造成内存泄漏,请务必在确定不使用某个EventHandler时,调用反注册代码将其注销,反注册的方法为:

SMSSDK.unregisterEventHandler(EventHandler);

   在EventHandler的4个回调方法都可能不在UI线程下,因此如果要在其中执行UI操作,请务必使用Handler发送一个消息给UI线程处理。