Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
YDL-Component-Medical
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
杨凯
YDL-Component-Medical
Commits
7967b66f
Commit
7967b66f
authored
Apr 13, 2020
by
严久程
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
声网日志
parent
83ff181a
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
140 additions
and
211 deletions
+140
-211
AudioHomeActivity.kt
m-audioim/src/main/java/com/ydl/audioim/AudioHomeActivity.kt
+40
-111
YDLavManager.kt
m-audioim/src/main/java/com/ydl/audioim/YDLavManager.kt
+52
-11
ConsultantAudioHomeActivity.kt
m-audioim/src/main/java/com/ydl/consultantim/ConsultantAudioHomeActivity.kt
+48
-89
No files found.
m-audioim/src/main/java/com/ydl/audioim/AudioHomeActivity.kt
View file @
7967b66f
...
...
@@ -41,10 +41,6 @@ import com.ydl.webview.RefreshWebEvent
import
com.ydl.ydl_av.chat.bean.AudioMessageBean
import
com.ydl.ydl_av.messge_service.YDLRTMClient
import
com.ydl.ydl_av.messge_service.callback.CancelCallStatusListener
import
com.ydl.ydl_av.messge_service.callback.CallListener
import
com.ydl.ydl_av.messge_service.callback.CancelCallStatusListener
import
com.ydl.ydl_av.messge_service.response.CallLocalResponse
import
com.ydl.ydl_av.messge_service.response.CallRemoteResponse
import
com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler
import
com.ydl.ydl_av.voice.manager.YDLVoiceManager
import
com.ydl.ydl_image.config.SimpleImageOpConfiger
...
...
@@ -60,6 +56,7 @@ import com.ydl.ydlcommon.utils.log.LogHelper
import
com.ydl.ydlcommon.utils.remind.ToastHelper
import
com.yidianling.user.api.service.IUserService
import
de.greenrobot.event.EventBus
import
io.agora.rtc.Constants
import
io.agora.rtc.IRtcEngineEventHandler
import
io.reactivex.Observable
import
io.reactivex.android.schedulers.AndroidSchedulers
...
...
@@ -194,6 +191,7 @@ class AudioHomeActivity :
runOnUiThread
{
when
(
warn
)
{
103
,
104
,
105
,
106
,
107
->
{
writeAgoraLog
(
"通话挂断:网络异常(${warn})"
)
showToast
(
"当前网络较差,请更换网络!"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
...
...
@@ -263,6 +261,7 @@ class AudioHomeActivity :
//更新:现在专家先加入频道,所以不会有等待的过程,
runOnUiThread
{
writeAgoraLog
(
"主叫加入频道成功"
)
//自己加入频道成功
connectSuccess
()
}
...
...
@@ -275,6 +274,7 @@ class AudioHomeActivity :
runOnUiThread
{
//自己加入频道成功
if
(!
isConnectSuccess
)
{
writeAgoraLog
(
"主叫重新加入频道成功"
)
connectSuccess
()
}
}
...
...
@@ -285,6 +285,7 @@ class AudioHomeActivity :
super
.
onRtcStats
(
stats
)
//因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断
if
(
isConnectSuccess
&&
null
!=
stats
?.
users
&&
stats
.
users
==
1
)
{
writeAgoraLog
(
"通话结束:用户加入了频道,但频道内只有一个人"
)
com
.
yidianling
.
common
.
tools
.
ToastUtil
.
toastShort
(
"专家已挂断"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
...
...
@@ -296,6 +297,7 @@ class AudioHomeActivity :
super
.
onConnectionStateChanged
(
state
,
reason
)
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if
(
reason
==
3
)
{
writeAgoraLog
(
"通话结束:原因(${reason})"
)
com
.
yidianling
.
common
.
tools
.
ToastUtil
.
toastShort
(
"专家已挂断"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
...
...
@@ -310,15 +312,6 @@ class AudioHomeActivity :
uploadLog
()
}
override
fun
onLastmileQuality
(
quality
:
Int
)
{
super
.
onLastmileQuality
(
quality
)
// LogUtil.e("[agora]网络质量报告回调${quality}")
}
override
fun
onConnectionInterrupted
()
{
super
.
onConnectionInterrupted
()
LogUtil
.
e
(
"[agora]连接中断回调"
)
}
override
fun
onUserJoined
(
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onUserJoined
(
uid
,
elapsed
)
...
...
@@ -328,6 +321,7 @@ class AudioHomeActivity :
override
fun
onUserOffline
(
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onUserOffline
(
uid
,
elapsed
)
LogUtil
.
e
(
"[agora]远端用户$uid 离开频道回调"
)
writeAgoraLog
(
"接通后通话结束:对方已挂断"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
showToast
(
"专家已挂断"
)
...
...
@@ -358,16 +352,19 @@ class AudioHomeActivity :
initSensorManager
()
//页面传递数据初始化
initIntentData
()
if
(
YDLavManager
.
sdkStatus
!=
Constants
.
CONNECTION_STATE_CONNECTED
)
{
//再次登录声网,确保声网登录状态
reLoginRTM
()
}
//view初始化
initView
()
//设置信令的回调
setCallBack
()
//点击事件
setClickEvent
()
//权限申请
requestPermission
()
}
private
fun
setWindowStatusBarColor
()
{
StatusBarUtils
.
setWindowStatusBarColor
(
this
,
R
.
color
.
audioim_color_40353535
)
}
...
...
@@ -397,14 +394,6 @@ class AudioHomeActivity :
listenId
=
intent
.
getStringExtra
(
IntentConstants
.
INTENT_LISTEN_ID
)
commentUrl
=
intent
.
getStringExtra
(
IntentConstants
.
INTENT_COMMENT_URL
)
writeAgoraLog
()
localRemainTime
=
remainTime
?.
toInt
()
handler
=
Handler
()
vibrator
=
getSystemService
(
Service
.
VIBRATOR_SERVICE
)
as
Vibrator
?
}
private
fun
writeAgoraLog
()
{
val
logBean
=
AgoraLogInfoBean
(
expertHeadUrl
,
expertName
,
...
...
@@ -415,17 +404,24 @@ class AudioHomeActivity :
callId
,
listenId
)
Observable
.
create
<
Any
>
{
try
{
val
content
=
Gson
().
toJson
(
logBean
)
AudioLogUtils
.
writeAgoraLog
(
content
,
"confide"
)
}
catch
(
e
:
Exception
)
{
writeAgoraLog
(
"主叫方发送的邀请通话消息内容:$content"
,
isAppend
=
false
)
localRemainTime
=
remainTime
?.
toInt
()
handler
=
Handler
()
vibrator
=
getSystemService
(
Service
.
VIBRATOR_SERVICE
)
as
Vibrator
?
}
}.
subscribeOn
(
Schedulers
.
io
())
.
subscribe
()
private
fun
reLoginRTM
()
{
writeAgoraLog
(
"RMT状态:${YDLavManager.sdkStatus},重新登录RMT"
)
val
uid
=
YdlCommonRouterManager
.
getYdlCommonRoute
().
getUid
().
toString
()
YDLavManager
.
instances
.
login
(
uid
)
{
_isSuccess
,
_msg
->
writeAgoraLog
(
"登录RTM的uid=${uid}"
)
val
result
=
if
(
_isSuccess
)
"RMT登录成功"
else
"RMT登录失败:$_msg"
writeAgoraLog
(
result
)
}
}
private
fun
initView
()
{
tv_change_route
.
isEnabled
=
false
...
...
@@ -465,8 +461,8 @@ class AudioHomeActivity :
return
@setOnClickListener
}
if
(
isConnectSuccess
)
{
writeAgoraLog
(
"已接通:主叫主动挂断"
)
updateExpertStatus
(
false
,
1
)
// userCloseCalling()
leaveChannel
()
uploadLog
()
}
else
{
...
...
@@ -503,71 +499,6 @@ class AudioHomeActivity :
}
}
private
fun
setCallBack
()
{
/**
* 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 onMessageReceived(message: RTMMesssage?, member: ChannelMember?) {
// //接到频道消息
// LogUtil.i("[agora]接到${member?.channelId}频道${member?.userId}的消息:" + message?.text)
// }
//
// override fun onMemberJoined(member: ChannelMember?) {
// //新用户加入频道
// LogUtil.i("[agora]新用户加入${member?.channelId}频道:${member?.userId}")
// }
//
// override fun onMemberLeft(member: ChannelMember?) {
// LogUtil.i("[agora]有用户离开${member?.channelId}频道:${member?.userId}")
// }
// })
}
/**
* 请求权限
*/
...
...
@@ -613,22 +544,9 @@ class AudioHomeActivity :
)
sendDoctocrMsg
=
Gson
().
toJson
(
msgBean
)
writeAgoraLog
(
"主叫发送通话邀请"
)
rtcCall
()
// Observable.interval(0, 100, TimeUnit.MILLISECONDS)
// .subscribeOn(Schedulers.computation())
// .take(303)
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe({
// var result = it.toFloat() / 2.5f
// progress_view.setProgress(result)
// if (result >= 100f && !iv_hang_up.isEnabled) {
// //挂断按钮可点击
// iv_hang_up.isEnabled = true
// iv_hang_up.setImageResource(R.drawable.audioim_img_hang_up)
// }
// }, {}, {})
//开始60s等待倒计时
waitDisposable
=
Observable
.
interval
(
0
,
100
,
TimeUnit
.
MILLISECONDS
)
...
...
@@ -650,6 +568,7 @@ class AudioHomeActivity :
if
(!
isConnectSuccess
)
{
//关闭音乐
stopPlaying
()
writeAgoraLog
(
"未接通挂断:60s等待倒计时结束挂断"
)
//提示切换传统线路
//发送消息通知专家用户已挂断
YDLRTMClient
.
instances
.
cancelCall
(
listenerUid
,
channelId
,
object
:
CancelCallStatusListener
{
...
...
@@ -693,6 +612,7 @@ class AudioHomeActivity :
* 声网加入频道
*/
fun
joinChannel
()
{
writeAgoraLog
(
"对方接受了通话邀请,主叫开始加入频道:$channelId"
)
voiceManage
!!
.
getVoiceApi
().
joinChannel
(
token
!!
,
channelId
!!
,
...
...
@@ -707,10 +627,11 @@ class AudioHomeActivity :
*
*/
private
fun
userCloseCalling
()
{
//发送消息通知专家用户已挂断
writeAgoraLog
(
"未接听时:主叫主动挂断,取消呼叫"
)
//发送消息通知专家用户已挂断
YDLRTMClient
.
instances
.
cancelCall
(
listenerUid
,
channelId
,
object
:
CancelCallStatusListener
{
override
fun
onFailure
(
errorMsg
:
String
?,
errorCode
:
Int
)
{
writeAgoraLog
(
"未接听时:主叫主动挂断失败,msg=$errorMsg($errorCode),再次挂断"
)
YDLRTMClient
.
instances
.
cancelCall
(
listenerUid
,
channelId
,
null
)
}
...
...
@@ -1170,6 +1091,14 @@ class AudioHomeActivity :
}
fun
writeAgoraLog
(
content
:
String
,
isAppend
:
Boolean
=
true
)
{
try
{
AudioLogUtils
.
writeAgoraLog
(
content
,
"confide"
,
isAppend
)
}
catch
(
e
:
Exception
)
{
}
}
override
fun
finishActivity
()
{
leaveChannel
()
}
...
...
m-audioim/src/main/java/com/ydl/audioim/YDLavManager.kt
View file @
7967b66f
...
...
@@ -2,11 +2,13 @@ package com.ydl.audioim
import
android.annotation.SuppressLint
import
android.content.Context
import
android.os.Handler
import
android.text.TextUtils
import
com.alibaba.android.arouter.launcher.ARouter
import
com.google.gson.Gson
import
com.ydl.audioim.http.AudioApiRequestUtil
import
com.ydl.audioim.http.command.ConnectExceptionCommand
import
com.ydl.audioim.utils.AudioLogUtils
import
com.ydl.consultantim.ConsultantAudioHomeActivity
import
com.ydl.ydl_av.chat.bean.AudioMessageBean
import
com.ydl.ydl_av.messge_service.YDLRTMClient
...
...
@@ -38,6 +40,10 @@ class YDLavManager {
companion
object
{
val
FILE_NAME
=
"consult"
//当前sdk的登录状态
var
sdkStatus
=
-
1
val
instances
:
YDLavManager
by
lazy
(
mode
=
LazyThreadSafetyMode
.
SYNCHRONIZED
)
{
YDLavManager
()
}
...
...
@@ -49,6 +55,14 @@ class YDLavManager {
YDLRTMClient
.
instances
.
init
(
context
,
appId
,
listener
)
//设置回调
setCallback
()
val
uid
=
ModularServiceManager
.
provide
(
IUserService
::
class
.
java
).
getUserInfo
()
?.
uid
if
(!
TextUtils
.
isEmpty
(
uid
)
&&
!
TextUtils
.
equals
(
"0"
,
uid
))
{
//不延时,可能会导致请求api报 network not unablibale
Handler
().
postDelayed
({
login
(
uid
)
},
300
)
}
}
...
...
@@ -88,6 +102,7 @@ class YDLavManager {
if
(
act
is
AudioHomeActivity
)
{
act
.
runOnUiThread
{
ToastUtil
.
toastShort
(
"对方已挂断"
)
act
.
writeAgoraLog
(
"被叫拒绝了通话邀请"
)
//通话结束或挂断时,上传日志文件
act
.
uploadLog
()
act
.
leaveChannel
()
...
...
@@ -100,17 +115,23 @@ class YDLavManager {
override
fun
onCallCanceled
(
response
:
CallLocalResponse
?)
{
//返回给主叫
LogUtil
.
e
(
"[agora]主叫已取消呼叫邀请"
)
val
act
=
ActivityManager
.
getInstance
().
getTopTaskActivity
()
if
(
act
is
AudioHomeActivity
)
{
act
.
runOnUiThread
{
act
.
writeAgoraLog
(
"主叫呼叫取消:超时或主动取消"
)
}
}
}
override
fun
onCallFailure
(
response
:
CallLocalResponse
?,
errorCode
:
Int
)
{
//返回给主叫
LogUtil
.
e
(
"[agora]呼叫${response?.calleeId}用户失败:${response?.response}"
)
val
act
=
ActivityManager
.
getInstance
().
getTopTaskActivity
()
//专家离线或者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
()
...
...
@@ -118,7 +139,14 @@ class YDLavManager {
}
}
RtmStatusCode
.
LocalInvitationError
.
LOCAL_INVITATION_ERR_INVITATION_EXPIRE
->
{
//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
if
(
act
is
AudioHomeActivity
)
{
act
.
runOnUiThread
{
act
.
writeAgoraLog
(
"呼叫失败:${errorCode}"
)
//通话结束或挂断时,上传日志文件
act
.
uploadLog
()
act
.
leaveChannel
()
}
}
}
}
}
...
...
@@ -126,7 +154,7 @@ class YDLavManager {
override
fun
onRemoteInvitationReceived
(
response
:
CallRemoteResponse
?)
{
//返回给被叫
LogUtil
.
e
(
"[agora]收到来自${response?.callerId}的呼叫邀请"
)
receivedCall
(
response
?.
content
)
receivedCall
(
response
?.
content
,
"来自RTM"
)
}
override
fun
onRemoteInvitationAccepted
(
response
:
CallRemoteResponse
?)
{
...
...
@@ -142,12 +170,18 @@ class YDLavManager {
override
fun
onRemoteInvitationCanceled
(
response
:
CallRemoteResponse
?)
{
//返回给被叫
LogUtil
.
e
(
"[agora]主叫${response?.callerId}已取消呼叫邀请"
)
AudioLogUtils
.
writeAgoraLog
(
"呼叫邀请被取消:主叫主动取消"
,
FILE_NAME
)
closePage
()
}
override
fun
onRemoteInvitationFailure
(
response
:
CallRemoteResponse
?,
errorCode
:
Int
)
{
//返回给被叫
LogUtil
.
e
(
"[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}"
)
if
(
errorCode
==
RtmStatusCode
.
RemoteInvitationError
.
REMOTE_INVITATION_ERR_INVITATION_EXPIRE
)
{
//呼叫邀请过期
AudioLogUtils
.
writeAgoraLog
(
"呼叫邀请被取消:呼叫邀请过期"
,
FILE_NAME
)
}
else
{
AudioLogUtils
.
writeAgoraLog
(
"呼叫邀请被取消:错误原因(${errorCode})"
,
FILE_NAME
)
}
//关闭页面
closePage
()
}
...
...
@@ -158,8 +192,16 @@ class YDLavManager {
})
}
@SuppressLint
(
"CheckResult"
)
fun
login
(
userId
:
String
?)
{
login
(
userId
)
{
_
,
_
->
}
}
@SuppressLint
(
"CheckResult"
)
fun
login
(
userId
:
String
?,
event
:
(
isSuccess
:
Boolean
,
msg
:
String
?)
->
Unit
)
{
if
(
TextUtils
.
isEmpty
(
userId
)
||
userId
?:
"0"
<=
"0"
)
{
//如果uid为空或小于等于0 ,则不进行登录,因为uid为0也会登录成功,会导致后面uid正确时无法登录
LogUtil
.
e
(
"[agora]login-uid:$userId"
)
...
...
@@ -177,10 +219,12 @@ class YDLavManager {
override
fun
onSuccess
()
{
//登陆成功,发起呼叫
LogUtil
.
e
(
"[agora]实时消息登录成功"
)
event
(
true
,
""
)
}
override
fun
onFailure
(
msg
:
String
?)
{
LogUtil
.
e
(
"[agora]实时消息登录失败:$msg"
)
event
(
false
,
msg
)
}
})
...
...
@@ -199,7 +243,7 @@ class YDLavManager {
* 收到邀请
*/
@SuppressLint
(
"CheckResult"
)
fun
receivedCall
(
content
:
String
?)
{
fun
receivedCall
(
content
:
String
?
,
from
:
String
=
""
)
{
if
(!
TextUtils
.
isEmpty
(
content
))
{
//如果已经接听了用户电话 再有电话进来 是不能接听的
if
(!
activityIsExists
(
ConsultantAudioHomeActivity
::
class
.
java
)
&&
!
activityIsExists
(
...
...
@@ -215,14 +259,10 @@ class YDLavManager {
ARouter
.
getInstance
().
build
(
"/av/ConsultantAudioHomeActivity"
)
.
withString
(
"param"
,
content
)
.
navigation
()
}
}
else
{
try
{
val
mAudioMessageBean
=
Gson
().
fromJson
(
content
,
AudioMessageBean
::
class
.
java
)
YDLRTMClient
.
instances
.
refuseCall
(
mAudioMessageBean
.
channelId
)
}
catch
(
e
:
Exception
)
{
AudioLogUtils
.
writeAgoraLog
(
"收到主叫方通话邀请($from)"
,
FILE_NAME
,
false
)
}
}
else
{
LogUtil
.
d
(
"[agora]收到声网邀请,但界面实例已存在"
)
}
}
else
{
...
...
@@ -303,6 +343,7 @@ class YDLavManager {
}
override
fun
onConnectionStateChanged
(
state
:
Int
,
reason
:
Int
)
{
sdkStatus
=
state
LogUtil
.
i
(
"[agora]onConnectionStateChanged:state:${state} -->reason:$reason"
)
}
...
...
m-audioim/src/main/java/com/ydl/consultantim/ConsultantAudioHomeActivity.kt
View file @
7967b66f
...
...
@@ -52,6 +52,7 @@ import com.ydl.ydlcommon.utils.remind.ToastHelper
import
com.yidianling.common.tools.ToastUtil
import
com.yidianling.user.api.service.IUserService
import
de.greenrobot.event.EventBus
import
io.agora.rtc.Constants
import
io.agora.rtc.IRtcEngineEventHandler
import
io.reactivex.Observable
import
io.reactivex.android.schedulers.AndroidSchedulers
...
...
@@ -128,9 +129,12 @@ class ConsultantAudioHomeActivity :
override
fun
onJoinChannelSuccess
(
channel
:
String
?,
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onJoinChannelSuccess
(
channel
,
uid
,
elapsed
)
LogUtil
.
e
(
"[agora]$uid 加入频道回调"
)
writeAgoraLog
(
"被叫加入声网($channel)频道成功"
)
runOnUiThread
{
// 加入频道后再通知用户已接受
YDLRTMClient
.
instances
.
acceptCall
(
mAudioMessageBean
?.
channelId
)
runOnUiThread
{
tv_toast
.
visibility
=
View
.
VISIBLE
tv_toast
.
text
=
"连接中..."
...
...
@@ -143,9 +147,32 @@ class ConsultantAudioHomeActivity :
}
}
/**
* 重新加入频道回调
*/
override
fun
onRejoinChannelSuccess
(
channel
:
String
?,
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onRejoinChannelSuccess
(
channel
,
uid
,
elapsed
)
LogUtil
.
e
(
"[agora]$uid 重新加入频道回调"
)
writeAgoraLog
(
"被叫重新加入声网频道($channel)成功"
)
runOnUiThread
{
if
(!
isConnectSuccess
)
{
tv_toast
.
visibility
=
View
.
VISIBLE
tv_toast
.
text
=
"连接中..."
voiceManage
!!
.
getVoiceApi
().
setEnableSpeakerphone
(
false
)
//5s倒计时,5s后还是连接中,则直接关闭页面
connectingStatusWaitingTimeCount
()
}
}
}
override
fun
onUserJoined
(
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onUserJoined
(
uid
,
elapsed
)
LogUtil
.
e
(
"[agora]远端用户加入频道回调"
)
writeAgoraLog
(
"主叫加入声网频道成功"
)
//另一方加入频道成功
runOnUiThread
{
isConnectSuccess
=
true
...
...
@@ -166,6 +193,7 @@ class ConsultantAudioHomeActivity :
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if
(
reason
==
3
)
{
ToastUtil
.
toastShort
(
"对方已挂断"
)
writeAgoraLog
(
"通话挂断:网络连接被服务器中止"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
leaveChannel
()
...
...
@@ -203,6 +231,7 @@ class ConsultantAudioHomeActivity :
LogUtil
.
e
(
"[agora]$uid 主播离开频道回调"
)
runOnUiThread
{
showLongToast
(
"对方已挂断"
)
writeAgoraLog
(
"通话接通后挂断:主叫离开频道"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
if
(
null
!=
totalDisposable
)
{
...
...
@@ -214,27 +243,6 @@ class ConsultantAudioHomeActivity :
}
/**
* 重新加入频道回调
*/
override
fun
onRejoinChannelSuccess
(
channel
:
String
?,
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onRejoinChannelSuccess
(
channel
,
uid
,
elapsed
)
LogUtil
.
e
(
"[agora]$uid 重新加入频道回调"
)
runOnUiThread
{
if
(!
isConnectSuccess
)
{
tv_toast
.
visibility
=
View
.
VISIBLE
tv_toast
.
text
=
"连接中..."
voiceManage
!!
.
getVoiceApi
().
setEnableSpeakerphone
(
false
)
//5s倒计时,5s后还是连接中,则直接关闭页面
connectingStatusWaitingTimeCount
()
}
}
}
/**
* 网络质量报告回调
* 报告本地用户的网络质量。当你调用 enableLastmileTest 之后,该回调函数每 2 秒触发一次
*/
...
...
@@ -257,6 +265,7 @@ class ConsultantAudioHomeActivity :
runOnUiThread
{
when
(
warn
)
{
103
,
104
,
105
,
106
,
107
->
{
writeAgoraLog
(
"通话挂断:网络异常($warn)"
)
showLongToast
(
"当前网络较差,请更换网络!"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
...
...
@@ -339,8 +348,6 @@ class ConsultantAudioHomeActivity :
ConsultantAudioUtils
.
wakeUpAndUnlock
(
this
)
//页面传递数据初始化
getParam
()
//设置信令的回调
setCallback
()
//初始化传感器
initSensorManager
()
initUser
()
...
...
@@ -362,10 +369,20 @@ class ConsultantAudioHomeActivity :
if
(
null
!=
intent
.
getStringExtra
(
PARAM
))
{
val
json
=
intent
.
getStringExtra
(
PARAM
)
if
(!
TextUtils
.
isEmpty
(
json
))
{
writeAgoraLog
(
json
)
writeAgoraLog
(
"收到邀请通话消息内容:$json"
)
mAudioMessageBean
=
Gson
().
fromJson
(
json
,
AudioMessageBean
::
class
.
java
)
YDLavManager
.
instances
.
login
(
ModularServiceManager
.
provide
(
IUserService
::
class
.
java
).
getUserInfo
()
?.
uid
)
if
(
YDLavManager
.
sdkStatus
!=
Constants
.
CONNECTION_STATE_CONNECTED
)
{
writeAgoraLog
(
"RMT状态:${YDLavManager.sdkStatus},重新登录RMT"
)
val
uid
=
ModularServiceManager
.
provide
(
IUserService
::
class
.
java
).
getUserInfo
()
?.
uid
YDLavManager
.
instances
.
login
(
uid
)
{
_isSuccess
,
_msg
->
writeAgoraLog
(
"登录RTM的uid=${uid}"
)
val
result
=
if
(
_isSuccess
)
"RMT登录成功"
else
"RMT登录失败:$_msg"
writeAgoraLog
(
result
)
}
}
}
}
else
{
close
(
RESULT_NOT_ANSWERED_CODE
,
"通话异常"
)
...
...
@@ -373,69 +390,6 @@ class ConsultantAudioHomeActivity :
}
}
private
fun
setCallback
()
{
/**
* RTC 回调 在[YDLavManager.setCallback]中注册使用
*/
// YDLRTMClient.instances.setCallListener(object : CallListener {
// override fun onCallRecivedByPeer(response: CallLocalResponse?) {
// //返回给主叫:被叫已收到呼叫邀请
// LogUtil.I("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
// }
//
// override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.I("[agora]${response?.calleeId}已接受呼叫邀请")
// }
//
// override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.I("[agora]${response?.calleeId}已拒绝呼叫邀请")
// }
//
// override fun onCallCanceled(response: CallLocalResponse?) {
// //返回给主叫
// LogUtil.I("[agora]主叫已取消呼叫邀请")
// }
//
// override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
// //返回给主叫
// LogUtil.I("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
//
// }
//
// 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}")
// }
// })
}
@SuppressLint
(
"InvalidWakeLockTag"
)
private
fun
initSensorManager
()
{
sensorManager
=
getSystemService
(
Context
.
SENSOR_SERVICE
)
as
SensorManager
?
...
...
@@ -493,6 +447,7 @@ class ConsultantAudioHomeActivity :
* //获取声网频道号
*/
private
fun
getChannelToken
()
{
writeAgoraLog
(
"获取声网token"
)
//获取频道token
mPresenter
.
getChannelToken
(
mAudioMessageBean
,
false
)
}
...
...
@@ -506,6 +461,7 @@ class ConsultantAudioHomeActivity :
return
}
this
.
channelToken
=
token
writeAgoraLog
(
"返回的声网token=$channelToken"
)
if
(
needJoinChannel
)
{
//权限申请
requestPermission
()
...
...
@@ -622,11 +578,13 @@ class ConsultantAudioHomeActivity :
private
fun
showStopService
()
{
if
(
status
==
STATUS_NOT_ANSWERED
)
{
writeAgoraLog
(
"通话未接通挂断:主动挂断"
)
//通话结束或挂断时,上传日志文件
uploadLog
()
//当未接听 直接挂断 要发送给老师一条消息
close
(
RESULT_NOT_ANSWERED_CODE
,
"用户已挂断"
)
}
else
if
(
status
==
STATUS_ANSWERED
)
{
writeAgoraLog
(
"通话接通后挂断:专家主动挂断"
)
//正常接听 挂断电话 需要重置信令管理类状态
close
(
RESULT_ANSWERED_CODE
,
""
)
}
...
...
@@ -842,6 +800,7 @@ class ConsultantAudioHomeActivity :
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
({},
{},
{
if
(!
isConnectSuccess
)
{
writeAgoraLog
(
"通话未接通挂断:连接中的状态超过5s自动挂断"
)
ToastUtil
.
toastShort
(
this
,
"用户已挂断"
)
close
(
RESULT_NOT_ANSWERED_CODE
,
""
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment