聊天列表 更换设备通话状态本地存储

dev
李桢 1 year ago
parent 9946124b15
commit 5672fac09c
  1. 110
      app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java
  2. 89
      app/src/main/java/com/unionmed/unionmedtv/application/MyApplication.java
  3. 42
      app/src/main/java/com/unionmed/unionmedtv/meeting/MeetingActivity.java

@ -38,11 +38,13 @@ import com.unionmed.unionmedtv.bean.ImUserInfoBean;
import com.unionmed.unionmedtv.bean.RemoteBean;
import com.unionmed.unionmedtv.bean.Video;
import com.unionmed.unionmedtv.livedatas.LiveDataBus;
import com.unionmed.unionmedtv.meeting.MeetingActivity;
import com.unionmed.unionmedtv.network.ApiResponse;
import com.unionmed.unionmedtv.network.HttpData;
import com.unionmed.unionmedtv.utils.CacheUtil;
import com.unionmed.unionmedtv.utils.Constants;
import com.unionmed.unionmedtv.utils.OnChildClickListener;
import com.unionmed.unionmedtv.utils.UserInfoByServerUtil;
import org.jetbrains.annotations.NotNull;
@ -206,7 +208,9 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
userIds, null, RongCallCommon.CallMediaType.VIDEO, null);
}
} else {
changeUi(null);
if (DoctorDetailActivity.checkCamera(VideoCallActivity.this)) {
changeUi(null);
}
}
getUserInfoByServer(targetId);
}
@ -302,34 +306,15 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
multiCallEndMessage.setReason(reason);
multiCallEndMessage.setMediaType(RongIMClient.MediaType.AUDIO);
long serverTime = System.currentTimeMillis() - RongIMClient.getInstance().getDeltaTime();
// RongIMClient.getInstance()
// .insertIncomingMessage(
// callSession.getConversationType(),
// callSession.getTargetId(),
// callSession.getCallerUserId(),
// getReceivedStatus(reason),
// multiCallEndMessage,
// serverTime,
// null);
Message message = Message.obtain(callSession.getTargetId(), callSession.getConversationType(), multiCallEndMessage);
RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
@Override
public void onAttached(Message message) {
}
@Override
public void onSuccess(Message message) {
}
@Override
public void onError(Message message, RongIMClient.ErrorCode errorCode) {
}
});
RongIMClient.getInstance()
.insertIncomingMessage(
callSession.getConversationType(),
callSession.getTargetId(),
callSession.getCallerUserId(),
getReceivedStatus(reason),
multiCallEndMessage,
serverTime,
null);
}
/**
@ -513,6 +498,7 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
}
});
}
public static Message.ReceivedStatus getReceivedStatus(
RongCallCommon.CallDisconnectedReason reason) {
// 己方超时未接听或是对方取消通话时,应插入未读消息
@ -523,6 +509,7 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
// 默认是已读状态
return new Message.ReceivedStatus(1);
}
private void changeUi(RongCallCommon.CallDisconnectedReason reason) {
if (CallStatus.Idle == currentStatus) {//通话结束
@ -584,45 +571,42 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
//获取用户信息
private void getUserInfoByServer(String userId) {
EasyHttp.post(VideoCallActivity.this)
.api(new GetImUserInfoApi(CacheUtil.getToken().getToken(), userId))
.request(new OnHttpListener<HttpData<ApiResponse<ImUserInfoBean>>>() {
@Override
public void onHttpSuccess(HttpData<ApiResponse<ImUserInfoBean>> result) {
if (null != result.getData() && result.getData().isInnerRequestSucceed()
&& null != result.getData().getData()) {
if (currentStatus != CallStatus.OnCall) { //等待接听状态
Glide.with(VideoCallActivity.this)
.load(result.getData().getData().getHeadImg())
.apply(new RequestOptions()
.placeholder(R.color.white_e1e1e1)
)
.into(iv_icon);
tv_name.setText(result.getData().getData().getName());
if (type.equals("1")) {
tv_tip.setText("等待对方接听");
} else {
tv_tip.setText("对方邀请您进行通话");
}
}
if (usetInfo != null) {
usetInfo.success(result.getData().getData());
}
UserInfoByServerUtil.getUserInfoByServer(VideoCallActivity.this, userId, new UserInfoByServerUtil.UserInfoInterface() {
@Override
public void success(HttpData<ApiResponse<ImUserInfoBean>> result) {
if (null != result.getData() && result.getData().isInnerRequestSucceed()
&& null != result.getData().getData()) {
if (currentStatus != CallStatus.OnCall) { //等待接听状态
Glide.with(VideoCallActivity.this)
.load(result.getData().getData().getHeadImg())
.apply(new RequestOptions()
.placeholder(R.color.white_e1e1e1)
)
.into(iv_icon);
tv_name.setText(result.getData().getData().getName());
if (type.equals("1")) {
tv_tip.setText("等待对方接听");
} else {
if (usetInfo != null) {
usetInfo.fail();
}
LogUtils.e("用户信息数据解析失败");
tv_tip.setText("对方邀请您进行通话");
}
}
@Override
public void onHttpFail(Exception e) {
ToastUtils.showLong(e.getMessage());
LogUtils.e("用户信息失败", "失败:" + e);
if (usetInfo != null) {
usetInfo.success(result.getData().getData());
}
} else {
if (usetInfo != null) {
usetInfo.fail();
}
LogUtils.e("用户信息数据解析失败");
}
}
});
@Override
public void Fail(String e) {
ToastUtils.showLong(e);
LogUtils.e("用户信息失败", "失败:" + e);
}
});
}
@Override

@ -4,6 +4,7 @@ import android.Manifest;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import android.view.SurfaceView;
import android.view.View;
@ -63,10 +64,13 @@ import io.rong.calllib.RongCallClient;
import io.rong.calllib.RongCallCommon;
import io.rong.calllib.RongCallMissedListener;
import io.rong.calllib.RongCallSession;
import io.rong.calllib.message.CallSTerminateMessage;
import io.rong.calllib.message.MultiCallEndMessage;
import io.rong.common.utils.SSLUtils;
import io.rong.imlib.IRongCoreListener;
import io.rong.imlib.RongCoreClient;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import okhttp3.OkHttpClient;
public class MyApplication extends Application {
@ -103,6 +107,31 @@ public class MyApplication extends Application {
initRong();
RongIMClient.registerMessageType(MeetingMsgModel.class);
RongIMClient.registerMessageType(CustomNoticeMessageModel.class);
/**
* 更换设备 本地存储通话状态
*/
RongCallClient.setMissedCallListener(
new RongCallMissedListener() {
@Override
public void onRongCallMissed(
RongCallSession callSession,
RongCallCommon.CallDisconnectedReason reason) {
MultiCallEndMessage multiCallEndMessage = new MultiCallEndMessage();
multiCallEndMessage.setReason(reason);
multiCallEndMessage.setMediaType(RongIMClient.MediaType.AUDIO);
long serverTime = System.currentTimeMillis() - RongIMClient.getInstance().getDeltaTime();
RongIMClient.getInstance()
.insertIncomingMessage(
callSession.getConversationType(),
callSession.getTargetId(),
callSession.getCallerUserId(),
VideoCallActivity.getReceivedStatus(reason),
multiCallEndMessage,
serverTime,
null);
}
});
}
private SSLContext mySSLContext;
@ -158,10 +187,8 @@ public class MyApplication extends Application {
*/
@Override
public void onReceivedCall(RongCallSession callSession) {
if (DoctorDetailActivity.checkCamera(getCurrentActivity())) {
VideoCallActivity.currentStatus = VideoCallActivity.CallStatus.BeCall;
VideoCallActivity.startActivity(getCurrentActivity(), callSession.getInviterUserId(), "", VideoCallActivity.CALLED);
}
VideoCallActivity.currentStatus = VideoCallActivity.CallStatus.BeCall;
VideoCallActivity.startActivity(getCurrentActivity(), callSession.getInviterUserId(), "", VideoCallActivity.CALLED);
}
/**
@ -175,37 +202,33 @@ public class MyApplication extends Application {
*/
@Override
public void onCheckPermission(RongCallSession callSession) {
XXPermissions.with(getCurrentActivity())
// 申请单个权限
.permission(Manifest.permission.CAMERA, Permission.RECORD_AUDIO)
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
//.unchecked()
.request(new OnPermissionCallback() {
if (RongCallClient.getInstance() != null && RongCallClient.getInstance().getCallSession() != null) {
RongCallClient.getInstance().hangUpCall(RongCallClient.getInstance().getCallSession().getCallId());
MultiCallEndMessage multiCallEndMessage = new MultiCallEndMessage();
multiCallEndMessage.setReason(RongCallCommon.CallDisconnectedReason.REMOTE_REJECT);
multiCallEndMessage.setMediaType(RongIMClient.MediaType.AUDIO);
long serverTime = System.currentTimeMillis() - RongIMClient.getInstance().getDeltaTime();
RongIMClient.getInstance()
.insertIncomingMessage(
callSession.getConversationType(),
callSession.getTargetId(),
callSession.getCallerUserId(),
VideoCallActivity.getReceivedStatus(RongCallCommon.CallDisconnectedReason.REMOTE_REJECT),
multiCallEndMessage,
serverTime,
null);
}
new XPopup.Builder(getCurrentActivity()).isRequestFocus(true).asCustom(new TipDialog(getCurrentActivity(), "通话权限未设置", new TipDialog.DialogClick() {
@Override
public void cancel() {
@Override
public void onGranted(@NonNull List<String> permissions, boolean all) {
if (!all) {
// toast("获取部分权限成功,但部分权限未正常授予");
return;
}
if (DoctorDetailActivity.checkCamera(getCurrentActivity())) {
VideoCallActivity.currentStatus = VideoCallActivity.CallStatus.BeCall;
VideoCallActivity.startActivity(getCurrentActivity(), callSession.getInviterUserId(), "", VideoCallActivity.CALLED);
}
}
}
@Override
public void confirm() {
@Override
public void onDenied(@NonNull List<String> permissions, boolean never) {
if (never) {
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(getCurrentActivity(), permissions);
} else {
Toast.makeText(getCurrentActivity(), "语音权限获取失败", Toast.LENGTH_LONG).show();
}
}
});
}
})).show();
}
});

@ -43,6 +43,7 @@ import com.unionmed.unionmedtv.bean.ImUserInfoBean;
import com.unionmed.unionmedtv.network.ApiResponse;
import com.unionmed.unionmedtv.network.HttpData;
import com.unionmed.unionmedtv.utils.CacheUtil;
import com.unionmed.unionmedtv.utils.UserInfoByServerUtil;
import java.util.ArrayList;
import java.util.List;
@ -383,31 +384,28 @@ public class MeetingActivity extends BaseActivity implements MeetingPresenter.Me
//获取用户信息
private void getUserInfoByServer(String userId, UsetInfoInterface usetInfoInterface) {
EasyHttp.post(MeetingActivity.this)
.api(new GetImUserInfoApi(CacheUtil.getToken().getToken(), userId))
.request(new OnHttpListener<HttpData<ApiResponse<ImUserInfoBean>>>() {
@Override
public void onHttpSuccess(HttpData<ApiResponse<ImUserInfoBean>> result) {
if (null != result.getData() && result.getData().isInnerRequestSucceed()
&& null != result.getData().getData()) {
if (usetInfoInterface != null) {
usetInfoInterface.success(result.getData().getData());
}
} else {
if (usetInfoInterface != null) {
usetInfoInterface.fail();
}
LogUtils.e("用户信息数据解析失败");
}
UserInfoByServerUtil.getUserInfoByServer(MeetingActivity.this, userId, new UserInfoByServerUtil.UserInfoInterface() {
@Override
public void success(HttpData<ApiResponse<ImUserInfoBean>> result) {
if (null != result.getData() && result.getData().isInnerRequestSucceed()
&& null != result.getData().getData()) {
if (usetInfoInterface != null) {
usetInfoInterface.success(result.getData().getData());
}
@Override
public void onHttpFail(Exception e) {
ToastUtils.showLong(e.getMessage());
LogUtils.e("用户信息失败", "失败:" + e);
} else {
if (usetInfoInterface != null) {
usetInfoInterface.fail();
}
LogUtils.e("用户信息数据解析失败");
}
}
});
@Override
public void Fail(String e) {
ToastUtils.showLong(e);
LogUtils.e("用户信息失败", "失败:" + e);
}
});
}
@Override

Loading…
Cancel
Save