From 5672fac09c78ab872aff56bad336f567b3296b0c Mon Sep 17 00:00:00 2001 From: linminjie <1004644107@qq.com> Date: Mon, 31 Jul 2023 15:29:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E5=88=97=E8=A1=A8=20?= =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E8=AE=BE=E5=A4=87=E9=80=9A=E8=AF=9D=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9C=AC=E5=9C=B0=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unionmedtv/activity/VideoCallActivity.java | 110 +++++++++------------ .../unionmedtv/application/MyApplication.java | 89 ++++++++++------- .../unionmedtv/meeting/MeetingActivity.java | 42 ++++---- 3 files changed, 123 insertions(+), 118 deletions(-) diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java index a1a257a..ae1e5ac 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.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>>() { - @Override - public void onHttpSuccess(HttpData> 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> 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 diff --git a/app/src/main/java/com/unionmed/unionmedtv/application/MyApplication.java b/app/src/main/java/com/unionmed/unionmedtv/application/MyApplication.java index 116c45f..278ba8e 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/application/MyApplication.java +++ b/app/src/main/java/com/unionmed/unionmedtv/application/MyApplication.java @@ -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 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 permissions, boolean never) { - if (never) { - // 如果是被永久拒绝就跳转到应用权限系统设置页面 - XXPermissions.startPermissionActivity(getCurrentActivity(), permissions); - } else { - Toast.makeText(getCurrentActivity(), "语音权限获取失败", Toast.LENGTH_LONG).show(); - } - } - }); + } + })).show(); } }); diff --git a/app/src/main/java/com/unionmed/unionmedtv/meeting/MeetingActivity.java b/app/src/main/java/com/unionmed/unionmedtv/meeting/MeetingActivity.java index 93c77e6..aed149e 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/meeting/MeetingActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/meeting/MeetingActivity.java @@ -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>>() { - @Override - public void onHttpSuccess(HttpData> 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> 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