比较极客的我们 能动手的尽量少BB
这里主要介绍两个API
getUnreadCount
setOnReceiveMessageListener
思路:为 setOnReceiveMessageListener 获取消息监听(只监听类型为客服的消息)使用Eventbus(前篇有介绍一个比较好的evenbus框架)分发到指定界面 getUnreadCount获取未读消息数量
@Subscriber(mode = ThreadMode.MAIN)
fun getMessage(servicesMsgEvent: ServicesMsgEvent) {
RongIMClient.getInstance().getUnreadCount(MyResultCallback(msg_num), Conversation.ConversationType.CUSTOMER_SERVICE)
}
class MyResultCallback(var msg_num: TextView?) : RongIMClient.ResultCallback<Int>() {
override fun onSuccess(p0: Int?) {
Log.i("MyResultCallback", "$p0")
msg_num?.text="$p0"
}
override fun onError(p0: RongIMClient.ErrorCode?) {
Log.i("MyResultCallback", p0.toString())
}
}
class RongCloudUtils {
companion object {
fun init(context: Context) {
val iorongtoken = SPUtil.getString(context, IORONGTOKEN)
if (iorongtoken.isEmpty()) {
return
}
RongIM.connect(iorongtoken, object : RongIMClient.ConnectCallback() {
override fun onSuccess(p0: String?) {
SPUtil.put(context, RONG_CLOUD_INIT_SUCCESS, true)
val member_name = SPUtil.getString(context, MEMBER_NAME)
val member_avatar = SPUtil.getString(context, MEMBER_AVATAR)
val member_id = SPUtil.getString(context, MEMBER_ID)
try {
//使用消息携带用户信息 RongIM.getInstance().setCurrentUserInfo(UserInfo(member_id, member_name, Uri.parse(member_avatar)))
RongIM.getInstance().setMessageAttachedUserInfo(true)
//消息监听 RongIMClient.setOnReceiveMessageListener(MyOnReceiveMessageListener())
} catch (e: Exception) {
SPUtil.clear(context)
}
}
override fun onError(p0: RongIMClient.ErrorCode?) {
Log.i("RongIM","客服链接失败,${p0?.message}")
SPUtil.put(context, RONG_CLOUD_INIT_SUCCESS, false)
}
override fun onTokenIncorrect() {
Log.i("RongIM","客服链接失败,onTokenIncorrect")
SPUtil.put(context, RONG_CLOUD_INIT_SUCCESS, false)
}
})
}
}
}
class MyOnReceiveMessageListener : RongIMClient.OnReceiveMessageListener {
override fun onReceived(msg: Message?, index: Int): Boolean {
EventBus.getDefault().postSticky(ServicesMsgEvent())
return true
}
}
注:这里用的Koltin 以后的Koltin必将成为java的替代语言。想学习的推荐这个网址