Commit f81c445c by 严久程

咨询加声网

parent 2326a717
......@@ -69,10 +69,11 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
override fun initDataAndEvent() {
// YDLavManager.instances.init(this, "3387e9b251f3491e9221a9877e8f7830")
YDLavManager.instances.login("13081706")
bindService()
reLoadData()
// reLoadData()
requestPermission()
tv_user.setOnClickListener {
reLoadData()
......@@ -111,7 +112,6 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
startActivity(Intent(this, NewTestHomeActivity::class.java))
}
bt_to_confide.setOnClickListener {
YDLavManager.instances.login("1193016")
startActivity(Intent(this, ConfideHomeActivity::class.java))
}
bt_to_muse.setOnClickListener {
......
......@@ -17,6 +17,7 @@ import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;
import com.ydl.audioim.YDLavManager;
import com.ydl.component.BuildConfig;
import com.ydl.component.MainActivity;
import com.ydl.media.audio.PlayService;
......@@ -49,6 +50,9 @@ public class DemoAppLifecycles implements IAppLifecycles {
//模块初始化
moduleInit(application);
if (NIMUtil.isMainProcess(application)) {
YDLavManager.Companion.getInstances().init(application, "13b1536698f64905a1e7e5bb978ba821");
//第三方SDK初始化
initThirdServiceSDK(application);
//Flutter 初始化需要在主线程中执行
......@@ -88,9 +92,9 @@ public class DemoAppLifecycles implements IAppLifecycles {
//子线程中初始化X5内核,防止ANR问题
initX5(application);
if (DemoGlobalConfig.appEnv.equals(YDLConstants.ENV_PROD)){
if (DemoGlobalConfig.appEnv.equals(YDLConstants.ENV_PROD)) {
// YDLavManager.Companion.getInstances().init(application, "3387e9b251f3491e9221a9877e8f7830");
}else {
} else {
// YDLavManager.Companion.getInstances().init(application, "13b1536698f64905a1e7e5bb978ba821");
}
......@@ -110,13 +114,13 @@ public class DemoAppLifecycles implements IAppLifecycles {
if (BuildConfig.FLAVOR.endsWith("ydl")) {
umAppkey = "56970affe0f55a9cda001e24";
channel = "android_" + channel;
initUM(umAppkey, channel,application);
initUM(umAppkey, channel, application);
PlatformConfig.setWeixin("wx57a9d930270498c7", "17c031f02500ded3457a80e69d8e5e45");
PlatformConfig.setQQZone("1105070461", "6BvkUnk6wXJekcgR");
}else if (BuildConfig.FLAVOR.endsWith("xlzx")) {
} else if (BuildConfig.FLAVOR.endsWith("xlzx")) {
umAppkey = "5859e1656e27a42fa400021f";
channel = "ATK_7_android_" + channel;
initUM(umAppkey, channel,application);
initUM(umAppkey, channel, application);
PlatformConfig.setWeixin("wx1c6af5a11b5f531f", "1ddb93abbb2d81e604657d38e94a5720");
PlatformConfig.setQQZone("1107931541", "8dCvxUpi525uPGTJ");
}
......@@ -139,7 +143,6 @@ public class DemoAppLifecycles implements IAppLifecycles {
}
private void initUM(String umAppKey, String channel, Application application) {
/**
* 初始化common库
......@@ -156,6 +159,7 @@ public class DemoAppLifecycles implements IAppLifecycles {
/**
* 初始化X5内核
*
* @param application
*/
private void initX5(Application application) {
......@@ -173,7 +177,7 @@ public class DemoAppLifecycles implements IAppLifecycles {
@Override
public void onViewInitFinished(boolean arg0) {
//初始化完成回调
LogUtil.i("QbSdk onViewInitFinished:"+arg0);
LogUtil.i("QbSdk onViewInitFinished:" + arg0);
}
@Override
......
......@@ -5,8 +5,8 @@ ext {
ydl_app = [
appName : "心理咨询壹点灵",
applicationId: "com.cxzapp.yidianling",
versionName : "4.0.31",
versionCode : 4031,
versionName : "4.0.99",
versionCode : 4099,
]
xlzx_app = [
......@@ -42,7 +42,7 @@ ext {
ydlPublishVersion = [
// -------------- 业务模块 --------------
//第三步 若干
"m-confide" : "0.0.48.7.5",
"m-confide" : "0.0.48.7.6",
"m-consultant" : "0.0.57.4",
"m-fm" : "0.0.29.3",
"m-user" : "0.0.58.2",
......@@ -75,7 +75,7 @@ ext {
"ydl-webview" : "0.0.37.1",
"ydl-media" : "0.0.20",
"ydl-pay" : "0.0.17",
"m-audioim" : "0.0.48.2.5",
"m-audioim" : "0.0.48.2.6",
"ydl-flutter-base": "0.0.10.9",
//以下 几乎不会动
......@@ -121,7 +121,7 @@ ext {
"ydl-webview" : "0.0.37.1",
"ydl-media" : "0.0.20",
"ydl-pay" : "0.0.17",
"m-audioim" : "0.0.48.2.5",
"m-audioim" : "0.0.48.2.6",
"ydl-flutter-base": "0.0.10.9",
//以下 几乎不会动
......
......@@ -483,100 +483,81 @@ class AudioHomeActivity :
}
private fun setCallBack() {
//RTC 回调
YDLRTMClient.instances.setCallListener(object : CallListener {
override fun onCallRecivedByPeer(response: CallLocalResponse?) {
playWaitingMusic()
//返回给主叫:被叫已收到呼叫邀请
LogUtil.i("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
}
override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
//返回给主叫
LogUtil.i("[agora]${response?.calleeId}已接受呼叫邀请")
//加入声网频道时机修改:用户收到专家接受邀请的回调后再加入声网频道
joinChannel()
}
override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
//返回给主叫
LogUtil.i("[agora]${response?.calleeId}已拒绝呼叫邀请")
ToastUtil.showToast(applicationContext, "对方已挂断")
//通话结束或挂断时,上传日志文件
uploadLog()
leaveChannel()
}
override fun onCallCanceled(response: CallLocalResponse?) {
//返回给主叫
LogUtil.i("[agora]主叫已取消呼叫邀请")
}
override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
//返回给主叫
LogUtil.i("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
//专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
when (errorCode) {
//被叫不在线 呼叫邀请发出 30 秒后被叫仍未 ACK 响应呼叫邀请
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_OFFLINE,
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_NO_RESPONSE -> {
YDLRTMClient.instances.call(listenerUid!!, channelId, sendDoctocrMsg)
}
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
}
}
}
override fun onRemoteInvitationReceived(response: CallRemoteResponse?) {
//返回给被叫
LogUtil.i("[agora]收到来自${response?.callerId}的呼叫邀请")
}
override fun onRemoteInvitationAccepted(response: CallRemoteResponse?) {
//返回给被叫
LogUtil.i("[agora]接受来自${response?.callerId}的呼叫成功")
}
override fun onRemoteInvitationRefused(response: CallRemoteResponse?) {
//返回给被叫
LogUtil.i("[agora]已拒绝来自${response?.callerId}的呼叫")
}
override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) {
//返回给被叫
LogUtil.i("[agora]主叫${response?.callerId}已取消呼叫邀请")
}
override fun onRemoteInvitationFailure(response: CallRemoteResponse?, errorCode: Int) {
//返回给被叫
LogUtil.i("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
}
override fun onOtherMsg(error: String?) {
LogUtil.i("[agora]其它消息:${error}")
}
})
// channelManager = YDLRTMClient.instances.createChannelManager(channelId, object : ChannelListener {
// override fun onMemberCountUpdated(memberCount: Int) {
// //频道人数更新
// LogUtil.i("[agora]当前频道人数:$memberCount")
/**
* RTC 回调 在[YDLavManager.setCallback]中注册使用
*/
// //RTC 回调
// YDLRTMClient.instances.setCallListener(object : CallListener {
// override fun onCallRecivedByPeer(response: CallLocalResponse?) {
// playWaitingMusic()
// //返回给主叫:被叫已收到呼叫邀请
// LogUtil.i("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
// }
//
// override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.i("[agora]${response?.calleeId}已接受呼叫邀请")
// //加入声网频道时机修改:用户收到专家接受邀请的回调后再加入声网频道
// joinChannel()
// }
//
// override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.i("[agora]${response?.calleeId}已拒绝呼叫邀请")
// ToastUtil.showToast(applicationContext, "对方已挂断")
// //通话结束或挂断时,上传日志文件
// uploadLog()
// leaveChannel()
// }
//
// override fun onCallCanceled(response: CallLocalResponse?) {
// //返回给主叫
// LogUtil.i("[agora]主叫已取消呼叫邀请")
// }
//
// override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
// //返回给主叫
// LogUtil.i("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
// //专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
// when (errorCode) {
// //被叫不在线 呼叫邀请发出 30 秒后被叫仍未 ACK 响应呼叫邀请
// RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_OFFLINE,
// RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_NO_RESPONSE -> {
// rtcCall()
// }
// RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
//
// }
// }
// }
//
// override fun onRemoteInvitationReceived(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.i("[agora]收到来自${response?.callerId}的呼叫邀请")
// }
//
// override fun onRemoteInvitationAccepted(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.i("[agora]接受来自${response?.callerId}的呼叫成功")
// }
//
// override fun onRemoteInvitationRefused(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.i("[agora]已拒绝来自${response?.callerId}的呼叫")
// }
//
// override fun onMessageReceived(message: RTMMesssage?, member: ChannelMember?) {
// //接到频道消息
// LogUtil.i("[agora]接到${member?.channelId}频道${member?.userId}的消息:" + message?.text)
// override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.i("[agora]主叫${response?.callerId}已取消呼叫邀请")
// }
//
// override fun onMemberJoined(member: ChannelMember?) {
// //新用户加入频道
// LogUtil.i("[agora]新用户加入${member?.channelId}频道:${member?.userId}")
// override fun onRemoteInvitationFailure(response: CallRemoteResponse?, errorCode: Int) {
// //返回给被叫
// LogUtil.i("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
// }
//
// override fun onMemberLeft(member: ChannelMember?) {
// LogUtil.i("[agora]有用户离开${member?.channelId}频道:${member?.userId}")
// override fun onOtherMsg(error: String?) {
// LogUtil.i("[agora]其它消息:${error}")
// }
// })
}
......@@ -626,7 +607,8 @@ class AudioHomeActivity :
)
sendDoctocrMsg = Gson().toJson(msgBean)
YDLRTMClient.instances.call(listenerUid!!, channelId, sendDoctocrMsg)
rtcCall()
Observable.interval(0, 100, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.computation())
......@@ -670,6 +652,11 @@ class AudioHomeActivity :
noticeServerPush(true)
}
fun rtcCall(){
YDLRTMClient.instances.call(listenerUid!!, channelId, sendDoctocrMsg)
}
/**
* 声网初始化
*/
......@@ -689,7 +676,7 @@ class AudioHomeActivity :
/**
* 声网加入频道
*/
private fun joinChannel() {
fun joinChannel() {
voiceManage!!.getVoiceApi().joinChannel(
token!!,
channelId!!,
......@@ -874,7 +861,7 @@ class AudioHomeActivity :
/**
* 播放等待音频
*/
private fun playWaitingMusic() {
fun playWaitingMusic() {
if (mPlayer == null) {
mPlayer = AudioPlayer(this)
}
......@@ -1046,7 +1033,7 @@ class AudioHomeActivity :
/**
* 声网离开频道
*/
private fun leaveChannel() {
fun leaveChannel() {
if (!isLeavelChannel) {
isLeavelChannel = true
//刷新h5页面
......@@ -1123,7 +1110,7 @@ class AudioHomeActivity :
}
private fun uploadLog() {
fun uploadLog() {
if (!hasUpLoadLog) {
hasUpLoadLog = true
LogHelper.getInstance().uploadLog(false)
......
......@@ -3,20 +3,29 @@ package com.ydl.audioim
import android.annotation.SuppressLint
import android.content.Context
import android.text.TextUtils
import com.alibaba.android.arouter.launcher.ARouter
import com.ydl.audioim.http.AudioApiRequestUtil
import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.consultantim.ConsultantAudioHomeActivity
import com.ydl.ydl_av.messge_service.YDLRTMClient
import com.ydl.ydl_av.messge_service.bean.RTMMesssage
import com.ydl.ydl_av.messge_service.callback.CallListener
import com.ydl.ydl_av.messge_service.callback.InitListener
import com.ydl.ydl_av.messge_service.callback.LoginCallback
import com.ydl.ydl_av.messge_service.request.LoginParam
import com.ydl.audioim.http.AudioApiRequestUtil
import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.ydl_av.messge_service.callback.CallListener
import com.ydl.ydl_av.messge_service.response.CallLocalResponse
import com.ydl.ydl_av.messge_service.response.CallRemoteResponse
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.log.LogHelper
import com.yidianling.common.tools.ToastUtil
import com.yidianling.user.api.service.IUserService
import io.agora.rtm.RtmStatusCode
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import java.util.concurrent.TimeUnit
/**
* @author harvie
......@@ -26,86 +35,130 @@ import io.reactivex.schedulers.Schedulers
class YDLavManager {
companion object{
val instances : YDLavManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){
companion object {
val instances: YDLavManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
YDLavManager()
}
}
private constructor()
fun init(context: Context,appId:String){
YDLRTMClient.instances.init(context,appId,listener)
fun init(context: Context, appId: String) {
YDLRTMClient.instances.init(context, appId, listener)
//设置回调
setCallback()
}
fun setCallback() {
private fun setCallback() {
YDLRTMClient.instances.setCallListener(object : CallListener {
override fun onCallRecivedByPeer(response: CallLocalResponse?) {
//返回给主叫:被叫已收到呼叫邀请
com.yidianling.common.tools.LogUtil.e("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
LogUtil.e("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
act.playWaitingMusic()
}
}
}
override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
//返回给主叫
com.yidianling.common.tools.LogUtil.e("[agora]${response?.calleeId}已接收呼叫邀请")
LogUtil.e("[agora]${response?.calleeId}已接收呼叫邀请")
//加入声网频道时机修改:用户收到专家接受邀请的回调后再加入声网频道
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
act.joinChannel()
}
}
}
override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
//返回给主叫
com.yidianling.common.tools.LogUtil.e("[agora]${response?.calleeId}已拒绝呼叫邀请")
LogUtil.e("[agora]${response?.calleeId}已拒绝呼叫邀请")
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
ToastUtil.toastShort("对方已挂断")
//通话结束或挂断时,上传日志文件
act.uploadLog()
act.leaveChannel()
}
}
}
override fun onCallCanceled(response: CallLocalResponse?) {
//返回给主叫
com.yidianling.common.tools.LogUtil.e("[agora]主叫已取消呼叫邀请")
LogUtil.e("[agora]主叫已取消呼叫邀请")
}
override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
//返回给主叫
com.yidianling.common.tools.LogUtil.e("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
LogUtil.e("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
//专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
when (errorCode) {
//被叫不在线 呼叫邀请发出 30 秒后被叫仍未 ACK 响应呼叫邀请
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_OFFLINE,
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_NO_RESPONSE -> {
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
act.rtcCall()
}
}
}
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
}
}
}
override fun onRemoteInvitationReceived(response: CallRemoteResponse?) {
//返回给被叫
com.yidianling.common.tools.LogUtil.e("[agora]收到来自${response?.callerId}的呼叫邀请")
LogUtil.e("[agora]收到来自${response?.callerId}的呼叫邀请")
receivedCall(response?.content)
}
override fun onRemoteInvitationAccepted(response: CallRemoteResponse?) {
//返回给被叫
com.yidianling.common.tools.LogUtil.e("[agora]接受来自${response?.callerId}的呼叫成功")
LogUtil.e("[agora]接受来自${response?.callerId}的呼叫成功")
}
override fun onRemoteInvitationRefused(response: CallRemoteResponse?) {
//返回给被叫
com.yidianling.common.tools.LogUtil.e("[agora]已拒绝来自${response?.callerId}的呼叫")
LogUtil.e("[agora]已拒绝来自${response?.callerId}的呼叫")
}
override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) {
//返回给被叫
com.yidianling.common.tools.LogUtil.e("[agora]主叫${response?.callerId}已取消呼叫邀请")
closePage(true)
LogUtil.e("[agora]主叫${response?.callerId}已取消呼叫邀请")
closePage()
}
override fun onRemoteInvitationFailure(response: CallRemoteResponse?, errorCode: Int) {
//返回给被叫
com.yidianling.common.tools.LogUtil.e("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
LogUtil.e("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
//关闭页面
closePage(true)
closePage()
}
override fun onOtherMsg(error: String?) {
com.yidianling.common.tools.LogUtil.e("[agora]其它消息:${error}")
LogUtil.e("[agora]其它消息:${error}")
}
})
}
@SuppressLint("CheckResult")
fun login(userId:String?){
if (TextUtils.isEmpty(userId) || userId?:"0" <= "0"){
fun login(userId: String?) {
if (TextUtils.isEmpty(userId) || userId ?: "0" <= "0") {
//如果uid为空或小于等于0 ,则不进行登录,因为uid为0也会登录成功,会导致后面uid正确时无法登录
LogUtil.e("[agora]login-uid:$userId")
return
......@@ -113,34 +166,88 @@ class YDLavManager {
//登录实时消息
//获取token
AudioApiRequestUtil.getAgoraToken()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if ("200".equals(it.code)){
YDLRTMClient.instances.login(LoginParam(userId,it.data.token),object : LoginCallback {
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if ("200".equals(it.code)) {
YDLRTMClient.instances.login(LoginParam(userId, it.data.token),
object : LoginCallback {
override fun onSuccess() {
//登陆成功,发起呼叫
LogUtil.d("[agora]实时消息登录成功")
LogUtil.e("[agora]实时消息登录成功")
}
override fun onFailure(msg: String?) {
LogUtil.d("[agora]实时消息登录失败:$msg")
LogUtil.e("[agora]实时消息登录失败:$msg")
}
})
}else{
LogUtil.e("声网token获取失败uid:"+userId+" error:"+it.msg)
LogHelper.getInstance().writeLogSync("声网token获取失败uid:"+userId+" error:"+it.msg)
} else {
LogUtil.e("声网token获取失败uid:" + userId + " error:" + it.msg)
LogHelper.getInstance()
.writeLogSync("声网token获取失败uid:" + userId + " error:" + it.msg)
}
}, {
LogUtil.e("声网token获取异常uid:" + userId + " error:" + it.message)
})
}
/**
* 收到邀请
*/
@SuppressLint("CheckResult")
fun receivedCall(content: String?) {
if (!TextUtils.isEmpty(content)) {
//如果已经接听了用户电话 再有电话进来 是不能接听的
if (!activityIsExists(ConsultantAudioHomeActivity::class.java) || ActivityManager.getInstance().getTopTaskActivity() !is AudioHomeActivity) {
//延时启动通话界面,防止刚打开就被main遮挡
Observable.timer(1000, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
LogUtil.e("[agora]启动通话界面")
//邀请加入频道消息,跳转通话界面
ARouter.getInstance().build("/av/ConsultantAudioHomeActivity")
.withString("param", content)
.navigation()
}
},{
LogUtil.e("声网token获取异常uid:"+userId+" error:"+it.message)
})
} else {
LogUtil.d("[agora]收到声网邀请,但界面实例已存在")
}
} else {
LogUtil.d("[agora]收到声网邀请,但response==null")
}
}
private fun activityIsExists(cls: Class<*>): Boolean {
for (activity in ActivityManager.getInstance().getActivitys()) {
if (activity.javaClass == cls) {
return true
}
}
return false
}
/**
* 关闭通话界面
*/
fun closePage() {
var act = ActivityManager.getInstance().getTopTaskActivity()
if (act is ConsultantAudioHomeActivity) {
//未接通时,收到呼叫进程失败关闭页面,已接通无需关闭
if (act.status == ConsultantAudioHomeActivity.STATUS_NOT_ANSWERED) {
act.close(ConsultantAudioHomeActivity.RESULT_USER_CANCEL, "")
}
}
}
/**
* 退出登录
*/
fun logout(){
fun logout() {
YDLRTMClient.instances.logout(object : LoginCallback {
override fun onSuccess() {
//退出登陆成功
......@@ -166,17 +273,18 @@ class YDLavManager {
.subscribe({
}, {
com.yidianling.common.tools.LogUtil.e("agora", "声网上传异常与错误日志接口调用失败:" + it.message)
LogUtil.e("agora", "声网上传异常与错误日志接口调用失败:" + it.message)
})
}
/**
* 实时消息全局监听
*/
private val listener = object :InitListener{
private val listener = object : InitListener {
override fun onTokenExpired() {
LogUtil.e("[agora]onTokenExpired")
instances.login(ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid)
}
override fun onMessageReceived(message: RTMMesssage, userId: Int) {
......
......@@ -27,6 +27,7 @@ import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.http.command.PayLoad
import com.ydl.audioim.player.AudioPlayer
import com.ydl.audioim.utils.AudioLogUtils
import com.ydl.audioim.utils.DateUtils
import com.ydl.consultantim.contract.IConsultantAudioHomeActivityContract
import com.ydl.consultantim.event.AudioHomeEvent
import com.ydl.consultantim.presenter.ConsultantAudioHomePresenterImpl
......@@ -38,7 +39,6 @@ import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler
import com.ydl.ydl_av.voice.manager.YDLVoiceManager
import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydl_image.manager.YDLImageCacheManager
import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydlcommon.base.BaseMvpActivity
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.router.YdlCommonRouterManager
......@@ -49,17 +49,16 @@ import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.common.tools.RxActivityTool
import com.yidianling.common.tools.ToastUtil
import com.yidianling.user.api.service.IUserService
import de.greenrobot.event.EventBus
import io.agora.rtc.IRtcEngineEventHandler
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.*
import org.reactivestreams.Subscription
import java.util.concurrent.TimeUnit
/**
* @author jiucheng
......@@ -68,7 +67,7 @@ import org.reactivestreams.Subscription
* @Company 壹点灵
* @date 2018/10/30
*/
@Route(path = "/av/AudioHomeActivity")
@Route(path = "/av/ConsultantAudioHomeActivity")
class ConsultantAudioHomeActivity :
BaseMvpActivity<IConsultantAudioHomeActivityContract.View, IConsultantAudioHomeActivityContract.Presenter>(),
IConsultantAudioHomeActivityContract.View,
......@@ -97,16 +96,12 @@ class ConsultantAudioHomeActivity :
*/
private var totalDisposable: Disposable? = null
private var ensureDialog: CommonDialog? = null
//频道管理器
// private var channelManager: ChannelManager? = null
//频道token
private var channelToken: String? = null
private var hasUpLoadLog = false
private var dialog: CommonDialog? = null
/**
* 事件回调 (SDK 通过指定的事件通知应用程序 SDK 的运行事件,如: 加入或离开频道,新用户加入频道等)
*/
......@@ -119,7 +114,7 @@ class ConsultantAudioHomeActivity :
*/
override fun onUserMuteAudio(uid: Int, muted: Boolean) {
runOnUiThread {
showLongToast("[agora]对方静音了,提醒他打开!")
showLongToast("对方静音了,提醒他打开!")
}
}
......@@ -149,19 +144,13 @@ class ConsultantAudioHomeActivity :
override fun onRtcStats(stats: IRtcEngineEventHandler.RtcStats?) {
if (null != stats?.users && stats.users == 1) {
ToastUtil.toastShort("用户已挂断")
//通话结束或挂断时,上传日志文件
uploadLog()
leaveChannel()
}
}
override fun onConnectionStateChanged(state: Int, reason: Int) {
super.onConnectionStateChanged(state, reason)
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if (reason == 3) {
ToastUtil.toastShort("用户已挂断")
ToastUtil.toastShort("对方已挂断")
//通话结束或挂断时,上传日志文件
uploadLog()
leaveChannel()
......@@ -198,7 +187,7 @@ class ConsultantAudioHomeActivity :
super.onUserOffline(uid, elapsed)
LogUtil.e("[agora]$uid 主播离开频道回调")
runOnUiThread {
showLongToast("用户已挂断")
showLongToast("对方已挂断")
//通话结束或挂断时,上传日志文件
uploadLog()
if (null != totalDisposable) {
......@@ -283,7 +272,7 @@ class ConsultantAudioHomeActivity :
close(RESULT_NOT_ANSWERED_CODE, "频道错误,请联系技术")
}
123 -> {
showLongToast("当前用户不允许接听电话,请联系客服")
showLongToast("对方不允许接听电话,请联系客服")
close(RESULT_NOT_ANSWERED_CODE, "该专家不允许接听电话,请联系客服")
}
else -> {
......@@ -415,26 +404,6 @@ class ConsultantAudioHomeActivity :
// }
// })
// channelManager = YDLRTMClient.instances.createChannelManager(mAudioMessageBean?.channelId, object : ChannelListener {
// override fun onMemberCountUpdated(memberCount: Int) {
// //频道人数更新
// com.yidianling.common.tools.LogUtil.i("[agora]当前频道人数:$memberCount")
// }
//
// override fun onMessageReceived(message: RTMMesssage?, member: ChannelMember?) {
// //接到频道消息
// com.yidianling.common.tools.LogUtil.i("[agora]接到${member?.channelId}频道${member?.userId}的消息:" + message?.text)
// }
//
// override fun onMemberJoined(member: ChannelMember?) {
// //新用户加入频道
// com.yidianling.common.tools.LogUtil.i("[agora]新用户加入${member?.channelId}频道:${member?.userId}")
// }
//
// override fun onMemberLeft(member: ChannelMember?) {
// com.yidianling.common.tools.LogUtil.i("[agora]有用户离开${member?.channelId}频道:${member?.userId}")
// }
// })
}
@SuppressLint("InvalidWakeLockTag")
......@@ -452,7 +421,7 @@ class ConsultantAudioHomeActivity :
* 初始化界面用户信息
*/
private fun initUser() {
var userName = "倾诉用户"
var userName = "咨询用户"
if (null != mAudioMessageBean) {
if (!TextUtils.isEmpty(mAudioMessageBean!!.userName)) {
userName = mAudioMessageBean!!.userName!!
......@@ -586,7 +555,7 @@ class ConsultantAudioHomeActivity :
override fun executeFinish() {
//通话结束或挂断时,上传日志文件
uploadLog()
ToastUtil.toastShort("用户已挂断")
ToastUtil.toastShort("对方已挂断")
close(RESULT_ANSWERED_CODE, "")
}
......@@ -597,6 +566,15 @@ class ConsultantAudioHomeActivity :
tv_toast.text = "已接通"
tv_toast.postDelayed({ tv_toast.visibility = View.GONE }, 500)
rl_remain_time.visibility = View.VISIBLE
totalDisposable = Observable.interval(0, 1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
tv_remain_time.text = DateUtils.formatTime(it.toString())
}, {})
}
/**
......@@ -607,30 +585,15 @@ class ConsultantAudioHomeActivity :
}
/**
* 显示终止服务弹窗
*/
private fun showStopService() {
if (null == dialog) {
dialog = CommonDialog(this)
.setTitle("温馨提示")
.setMessage("中途挂断可能会影响您在倾听专家榜的排名和曝光率,要谨慎选择哦!")
.setLeftOnclick("点错了", null)
.setRightClick("挂断") {
if (status == STATUS_NOT_ANSWERED) {
//通话结束或挂断时,上传日志文件
uploadLog()
//当未接听 直接挂断 要发送给用户一条消息
close(RESULT_NOT_ANSWERED_CODE, "咨询师已挂断")
} else if (status == STATUS_ANSWERED) {
//正常接听 挂断电话 需要重置信令管理类状态
close(RESULT_ANSWERED_CODE, "")
}
}
.setCancelAble(true)
}
if (null != dialog && !isFinishing) {
dialog!!.show()
if (status == STATUS_NOT_ANSWERED) {
//通话结束或挂断时,上传日志文件
uploadLog()
//当未接听 直接挂断 要发送给老师一条消息
close(RESULT_NOT_ANSWERED_CODE, "用户已挂断")
} else if (status == STATUS_ANSWERED) {
//正常接听 挂断电话 需要重置信令管理类状态
close(RESULT_ANSWERED_CODE, "")
}
}
......@@ -688,7 +651,7 @@ class ConsultantAudioHomeActivity :
//停止震动
VibratorUtil.StopVibrate(this)
if (!canExcute) {
ToastUtil.toastShort("用户已挂断")
ToastUtil.toastShort("对方已挂断")
finish()
} else {
if (null != mAudioMessageBean) {
......@@ -778,24 +741,27 @@ class ConsultantAudioHomeActivity :
//关闭本页面
fun close(code: Int, msg: String) {
LogUtil.e("[agora]close(code:$code,msg:$msg)")
if (status == STATUS_ANSWERED) {
//不再做操作,原先为调用接口
}
stopMusic()
//播放结束音频
playFinishMusic()
if (code == RESULT_ANSWERED_CODE) {
//已接听,正常挂断
//离开频道
leaveChannel()
} else if (code == RESULT_NOT_ANSWERED_CODE) {
//未接听,直接挂断 发送消息
YDLRTMClient.instances.refuseCall(mAudioMessageBean?.channelId)
} else if (code == RESULT_USER_CANCEL) {
// ToastUtils.toastShort(this, "用户已挂断")
runOnUiThread {
LogUtil.e("[agora]close(code:$code,msg:$msg)")
if (status == STATUS_ANSWERED) {
//不再做操作,原先为调用接口
}
stopMusic()
//播放结束音频
playFinishMusic()
if (code == RESULT_ANSWERED_CODE) {
//已接听,正常挂断
//离开频道
leaveChannel()
} else if (code == RESULT_NOT_ANSWERED_CODE) {
//未接听,直接挂断 发送消息
YDLRTMClient.instances.refuseCall(mAudioMessageBean?.channelId)
} else if (code == RESULT_USER_CANCEL) {
ToastUtil.toastShort("对方已挂断")
}
finish()
}
finish()
}
private fun stopMusic() {
......@@ -901,26 +867,6 @@ class ConsultantAudioHomeActivity :
}
}
fun showEnsureDialog() {
runOnUiThread {
//停止震动
VibratorUtil.StopVibrate(this)
if (ensureDialog == null) {
ensureDialog = CommonDialog(this)
.setMessage("用户已结束通话")
.setRightClick("确定") {
finish()
}
.setCancleIsVisibility(View.GONE)
.setCancelAble(false)
}
if (null != ensureDialog && !isFinishing) {
ensureDialog!!.show()
}
}
}
override fun onDestroy() {
LogUtil.e("http-------------onDestory")
leaveChannel()
......
......@@ -47,6 +47,21 @@
android:textColor="@color/white"
android:textSize="26sp"
tools:text="用户" />
<TextView
android:id="@+id/tv_tips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_name"
android:layout_centerHorizontal="true"
android:layout_marginLeft="25dp"
android:layout_marginTop="6dp"
android:layout_marginRight="25dp"
android:ellipsize="end"
android:gravity="center"
android:maxLines="2"
android:textColor="@color/white"
android:textSize="15sp"
android:text="向您发起语音通话请求" />
<!--自定义弹窗-->
......@@ -54,7 +69,7 @@
android:id="@+id/tv_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_name"
android:layout_below="@+id/tv_tips"
android:layout_centerHorizontal="true"
android:layout_marginTop="34dp"
android:background="@drawable/audioim_toast_view_background"
......@@ -83,7 +98,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="本次倾诉时间还有"
android:text="通话时长"
android:textColor="@color/platform_color_30FFFFFF"
android:textSize="12sp" />
......@@ -93,7 +108,7 @@
android:layout_height="wrap_content"
android:layout_below="@+id/tv_notes"
android:layout_centerHorizontal="true"
android:text="23:23"
android:text="00:00"
android:textColor="@color/white"
android:textSize="20sp" />
</RelativeLayout>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment