在使用第三方开发SDK的时候,可能会用上封装好的监听器。
在官方的开发文档中可能会出现仅写出部分监听参数的响应程序的情况。这样会导致一部分会出现的状态没有相应的响应。因此,我们需要仔细查看相关的API信息,将枚举类中的参数补全。
下面用环信SDK视频通话状态监听的代码作为示例:
官方开发文档:
EMClient.getInstance().callManager().addCallStateChangeListener(new EMCallStateChangeListener() {
@Override
public void onCallStateChanged(CallState callState, CallError error) {
switch (callState) {
case CONNECTING: // 正在连接对方
break;
case CONNECTED: // 双方已经建立连接
break;
case ACCEPTED: // 电话接通成功
break;
case DISCONNNECTED: // 电话断了
break;
case NETWORK_UNSTABLE: //网络不稳定
if(error == CallError.ERROR_NO_DATA){
//无通话数据
}else{
}
break;
case NETWORK_NORMAL: //网络恢复正常
break;
default:
break;
}
}
});
下面是另一位厉害的攻城狮建议的代码补充:
EMClient.getInstance().callManager().addCallStateChangeListener(new EMCallStateChangeListener() {
@Override
public void onCallStateChanged(CallState callState, CallError error) {
switch (callState) {
case IDLE: // 空闲
Log.i(TAG, "onCallStateChanged: 空闲");
break;
case RINGING: // 响铃
Log.i(TAG, "onCallStateChanged: 响铃");
break;
case ANSWERING: // 正在应答
Log.i(TAG, "onCallStateChanged: 正在应答");
break;
case CONNECTING: // 正在连接对方
Log.i(TAG, "onCallStateChanged: 正在连接对方");
break;
case CONNECTED: // 双方已经建立连接
Log.i(TAG, "onCallStateChanged: 双方已经建立连接");
break;
case ACCEPTED: // 电话接通成功
Log.i(TAG, "onCallStateChanged: 电话接通成功");
EMClient.getInstance().callManager().pauseVoiceTransfer();
break;
case DISCONNNECTED: // 电话断了
Log.i(TAG, "onCallStateChanged: 电话断了");
finish();
break;
case VOICE_PAUSE: // 声音暂停
Log.i(TAG, "onCallStateChanged: 声音暂停");
break;
case VOICE_RESUME: // 声音恢复
Log.i(TAG, "onCallStateChanged: 声音恢复");
break;
case VIDEO_PAUSE: // 视频暂停
Log.i(TAG, "onCallStateChanged: 视频暂停");
break;
case VIDEO_RESUME: // 视频恢复
Log.i(TAG, "onCallStateChanged: 视频恢复");
break;
case NETWORK_UNSTABLE: //网络不稳定
Log.i(TAG, "onCallStateChanged: 网络不稳定");
if (error == CallError.ERROR_NO_DATA) {
//无通话数据
} else {
}
break;
case NETWORK_NORMAL: //网络恢复正常
Log.i(TAG, "onCallStateChanged: 网络恢复正常");
break;
default:
break;
}
}
});