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

dev
李桢 1 year ago
parent 9946124b15
commit 5672fac09c
  1. 54
      app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java
  2. 79
      app/src/main/java/com/unionmed/unionmedtv/application/MyApplication.java
  3. 12
      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.RemoteBean;
import com.unionmed.unionmedtv.bean.Video; import com.unionmed.unionmedtv.bean.Video;
import com.unionmed.unionmedtv.livedatas.LiveDataBus; import com.unionmed.unionmedtv.livedatas.LiveDataBus;
import com.unionmed.unionmedtv.meeting.MeetingActivity;
import com.unionmed.unionmedtv.network.ApiResponse; import com.unionmed.unionmedtv.network.ApiResponse;
import com.unionmed.unionmedtv.network.HttpData; import com.unionmed.unionmedtv.network.HttpData;
import com.unionmed.unionmedtv.utils.CacheUtil; import com.unionmed.unionmedtv.utils.CacheUtil;
import com.unionmed.unionmedtv.utils.Constants; import com.unionmed.unionmedtv.utils.Constants;
import com.unionmed.unionmedtv.utils.OnChildClickListener; import com.unionmed.unionmedtv.utils.OnChildClickListener;
import com.unionmed.unionmedtv.utils.UserInfoByServerUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -206,8 +208,10 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
userIds, null, RongCallCommon.CallMediaType.VIDEO, null); userIds, null, RongCallCommon.CallMediaType.VIDEO, null);
} }
} else { } else {
if (DoctorDetailActivity.checkCamera(VideoCallActivity.this)) {
changeUi(null); changeUi(null);
} }
}
getUserInfoByServer(targetId); getUserInfoByServer(targetId);
} }
@ -302,34 +306,15 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
multiCallEndMessage.setReason(reason); multiCallEndMessage.setReason(reason);
multiCallEndMessage.setMediaType(RongIMClient.MediaType.AUDIO); multiCallEndMessage.setMediaType(RongIMClient.MediaType.AUDIO);
long serverTime = System.currentTimeMillis() - RongIMClient.getInstance().getDeltaTime(); long serverTime = System.currentTimeMillis() - RongIMClient.getInstance().getDeltaTime();
// RongIMClient.getInstance() RongIMClient.getInstance()
// .insertIncomingMessage( .insertIncomingMessage(
// callSession.getConversationType(), callSession.getConversationType(),
// callSession.getTargetId(), callSession.getTargetId(),
// callSession.getCallerUserId(), callSession.getCallerUserId(),
// getReceivedStatus(reason), getReceivedStatus(reason),
// multiCallEndMessage, multiCallEndMessage,
// serverTime, serverTime,
// null); 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) {
}
});
} }
/** /**
@ -513,6 +498,7 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
} }
}); });
} }
public static Message.ReceivedStatus getReceivedStatus( public static Message.ReceivedStatus getReceivedStatus(
RongCallCommon.CallDisconnectedReason reason) { RongCallCommon.CallDisconnectedReason reason) {
// 己方超时未接听或是对方取消通话时,应插入未读消息 // 己方超时未接听或是对方取消通话时,应插入未读消息
@ -523,6 +509,7 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
// 默认是已读状态 // 默认是已读状态
return new Message.ReceivedStatus(1); return new Message.ReceivedStatus(1);
} }
private void changeUi(RongCallCommon.CallDisconnectedReason reason) { private void changeUi(RongCallCommon.CallDisconnectedReason reason) {
if (CallStatus.Idle == currentStatus) {//通话结束 if (CallStatus.Idle == currentStatus) {//通话结束
@ -584,11 +571,9 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
//获取用户信息 //获取用户信息
private void getUserInfoByServer(String userId) { private void getUserInfoByServer(String userId) {
EasyHttp.post(VideoCallActivity.this) UserInfoByServerUtil.getUserInfoByServer(VideoCallActivity.this, userId, new UserInfoByServerUtil.UserInfoInterface() {
.api(new GetImUserInfoApi(CacheUtil.getToken().getToken(), userId))
.request(new OnHttpListener<HttpData<ApiResponse<ImUserInfoBean>>>() {
@Override @Override
public void onHttpSuccess(HttpData<ApiResponse<ImUserInfoBean>> result) { public void success(HttpData<ApiResponse<ImUserInfoBean>> result) {
if (null != result.getData() && result.getData().isInnerRequestSucceed() if (null != result.getData() && result.getData().isInnerRequestSucceed()
&& null != result.getData().getData()) { && null != result.getData().getData()) {
if (currentStatus != CallStatus.OnCall) { //等待接听状态 if (currentStatus != CallStatus.OnCall) { //等待接听状态
@ -617,11 +602,10 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe
} }
@Override @Override
public void onHttpFail(Exception e) { public void Fail(String e) {
ToastUtils.showLong(e.getMessage()); ToastUtils.showLong(e);
LogUtils.e("用户信息失败", "失败:" + e); LogUtils.e("用户信息失败", "失败:" + e);
} }
}); });
} }

@ -4,6 +4,7 @@ import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.view.View; import android.view.View;
@ -63,10 +64,13 @@ import io.rong.calllib.RongCallClient;
import io.rong.calllib.RongCallCommon; import io.rong.calllib.RongCallCommon;
import io.rong.calllib.RongCallMissedListener; import io.rong.calllib.RongCallMissedListener;
import io.rong.calllib.RongCallSession; 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.common.utils.SSLUtils;
import io.rong.imlib.IRongCoreListener; import io.rong.imlib.IRongCoreListener;
import io.rong.imlib.RongCoreClient; import io.rong.imlib.RongCoreClient;
import io.rong.imlib.RongIMClient; import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
public class MyApplication extends Application { public class MyApplication extends Application {
@ -103,6 +107,31 @@ public class MyApplication extends Application {
initRong(); initRong();
RongIMClient.registerMessageType(MeetingMsgModel.class); RongIMClient.registerMessageType(MeetingMsgModel.class);
RongIMClient.registerMessageType(CustomNoticeMessageModel.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; private SSLContext mySSLContext;
@ -158,11 +187,9 @@ public class MyApplication extends Application {
*/ */
@Override @Override
public void onReceivedCall(RongCallSession callSession) { public void onReceivedCall(RongCallSession callSession) {
if (DoctorDetailActivity.checkCamera(getCurrentActivity())) {
VideoCallActivity.currentStatus = VideoCallActivity.CallStatus.BeCall; VideoCallActivity.currentStatus = VideoCallActivity.CallStatus.BeCall;
VideoCallActivity.startActivity(getCurrentActivity(), callSession.getInviterUserId(), "", VideoCallActivity.CALLED); VideoCallActivity.startActivity(getCurrentActivity(), callSession.getInviterUserId(), "", VideoCallActivity.CALLED);
} }
}
/** /**
* targetSDKVersion 大于等于 23 时检查权限的回调 targetSDKVersion 小于 23 的时候不需要实现 * targetSDKVersion 大于等于 23 时检查权限的回调 targetSDKVersion 小于 23 的时候不需要实现
@ -175,37 +202,33 @@ public class MyApplication extends Application {
*/ */
@Override @Override
public void onCheckPermission(RongCallSession callSession) { public void onCheckPermission(RongCallSession callSession) {
XXPermissions.with(getCurrentActivity()) if (RongCallClient.getInstance() != null && RongCallClient.getInstance().getCallSession() != null) {
// 申请单个权限 RongCallClient.getInstance().hangUpCall(RongCallClient.getInstance().getCallSession().getCallId());
.permission(Manifest.permission.CAMERA, Permission.RECORD_AUDIO) MultiCallEndMessage multiCallEndMessage = new MultiCallEndMessage();
// 设置权限请求拦截器(局部设置) multiCallEndMessage.setReason(RongCallCommon.CallDisconnectedReason.REMOTE_REJECT);
//.interceptor(new PermissionInterceptor()) multiCallEndMessage.setMediaType(RongIMClient.MediaType.AUDIO);
// 设置不触发错误检测机制(局部设置) long serverTime = System.currentTimeMillis() - RongIMClient.getInstance().getDeltaTime();
//.unchecked() RongIMClient.getInstance()
.request(new OnPermissionCallback() { .insertIncomingMessage(
callSession.getConversationType(),
@Override callSession.getTargetId(),
public void onGranted(@NonNull List<String> permissions, boolean all) { callSession.getCallerUserId(),
if (!all) { VideoCallActivity.getReceivedStatus(RongCallCommon.CallDisconnectedReason.REMOTE_REJECT),
// toast("获取部分权限成功,但部分权限未正常授予"); multiCallEndMessage,
return; serverTime,
} null);
if (DoctorDetailActivity.checkCamera(getCurrentActivity())) {
VideoCallActivity.currentStatus = VideoCallActivity.CallStatus.BeCall;
VideoCallActivity.startActivity(getCurrentActivity(), callSession.getInviterUserId(), "", VideoCallActivity.CALLED);
} }
new XPopup.Builder(getCurrentActivity()).isRequestFocus(true).asCustom(new TipDialog(getCurrentActivity(), "通话权限未设置", new TipDialog.DialogClick() {
@Override
public void cancel() {
} }
@Override @Override
public void onDenied(@NonNull List<String> permissions, boolean never) { public void confirm() {
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.ApiResponse;
import com.unionmed.unionmedtv.network.HttpData; import com.unionmed.unionmedtv.network.HttpData;
import com.unionmed.unionmedtv.utils.CacheUtil; import com.unionmed.unionmedtv.utils.CacheUtil;
import com.unionmed.unionmedtv.utils.UserInfoByServerUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -383,11 +384,9 @@ public class MeetingActivity extends BaseActivity implements MeetingPresenter.Me
//获取用户信息 //获取用户信息
private void getUserInfoByServer(String userId, UsetInfoInterface usetInfoInterface) { private void getUserInfoByServer(String userId, UsetInfoInterface usetInfoInterface) {
EasyHttp.post(MeetingActivity.this) UserInfoByServerUtil.getUserInfoByServer(MeetingActivity.this, userId, new UserInfoByServerUtil.UserInfoInterface() {
.api(new GetImUserInfoApi(CacheUtil.getToken().getToken(), userId))
.request(new OnHttpListener<HttpData<ApiResponse<ImUserInfoBean>>>() {
@Override @Override
public void onHttpSuccess(HttpData<ApiResponse<ImUserInfoBean>> result) { public void success(HttpData<ApiResponse<ImUserInfoBean>> result) {
if (null != result.getData() && result.getData().isInnerRequestSucceed() if (null != result.getData() && result.getData().isInnerRequestSucceed()
&& null != result.getData().getData()) { && null != result.getData().getData()) {
if (usetInfoInterface != null) { if (usetInfoInterface != null) {
@ -402,11 +401,10 @@ public class MeetingActivity extends BaseActivity implements MeetingPresenter.Me
} }
@Override @Override
public void onHttpFail(Exception e) { public void Fail(String e) {
ToastUtils.showLong(e.getMessage()); ToastUtils.showLong(e);
LogUtils.e("用户信息失败", "失败:" + e); LogUtils.e("用户信息失败", "失败:" + e);
} }
}); });
} }

Loading…
Cancel
Save