瀏覽代碼

Merge branch 'watch.1.0.0' of http://git.wdklian.com/allen/ncs_android_frame into watch.1.0.0

wangjk 4 年之前
父節點
當前提交
f3b765f8c7
共有 35 個文件被更改,包括 538 次插入112 次删除
  1. 1 0
      home/src/main/AndroidManifest.xml
  2. 6 3
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/EventActivity.kt
  3. 24 5
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/RTCVoipAudioActivity.java
  4. 45 6
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/RTCVoipAudioRingingActivity.java
  5. 58 0
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/UserSettingActivity.java
  6. 1 1
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt
  7. 23 13
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchEventDetailActivity.kt
  8. 17 3
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchHomeActivity.kt
  9. 14 2
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchRegisterActivity.kt
  10. 9 1
      home/src/main/code/com/wdkl/ncs/android/component/home/service/TcpHandleService.kt
  11. 31 0
      home/src/main/code/com/wdkl/ncs/android/component/home/util/AppUtils.java
  12. 19 0
      home/src/main/code/com/wdkl/ncs/android/component/home/util/NetHelper.java
  13. 1 1
      home/src/main/code/com/wdkl/ncs/android/component/home/util/TimeTransition.kt
  14. 5 0
      home/src/main/res/drawable/selector_button_text_color.xml
  15. 49 0
      home/src/main/res/layout/user_setting_layout.xml
  16. 4 4
      home/src/main/res/layout/watch_activity_call_records.xml
  17. 11 8
      home/src/main/res/layout/watch_activity_dialing_voice.xml
  18. 16 14
      home/src/main/res/layout/watch_activity_event_detail.xml
  19. 1 1
      home/src/main/res/layout/watch_activity_home.xml
  20. 15 6
      home/src/main/res/layout/watch_activity_register.xml
  21. 12 11
      home/src/main/res/layout/watch_activity_voice_calls.xml
  22. 二進制
      home/src/main/res/raw/incoming_call.mp3
  23. 二進制
      home/src/main/res/raw/outgoing_call.mp3
  24. 1 1
      middleware/src/main/code/com/wdkl/ncs/android/middleware/api/ApiManager.kt
  25. 3 1
      middleware/src/main/code/com/wdkl/ncs/android/middleware/api/RegisterDeviceApi.kt
  26. 3 2
      middleware/src/main/code/com/wdkl/ncs/android/middleware/api/UrlManager.kt
  27. 4 0
      middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constants.kt
  28. 6 1
      middleware/src/main/code/com/wdkl/ncs/android/middleware/logic/contract/home/WatchDeviceContract.kt
  29. 26 2
      middleware/src/main/code/com/wdkl/ncs/android/middleware/logic/presenter/home/WatchDevicePresenter.kt
  30. 66 21
      middleware/src/main/code/com/wdkl/ncs/android/middleware/model/dos/DeviceDO.java
  31. 45 0
      middleware/src/main/code/com/wdkl/ncs/android/middleware/model/dto/TcpSeverDTO.java
  32. 5 1
      middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceChannel.java
  33. 8 0
      middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceUtil.java
  34. 3 1
      middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/TcpAction.java
  35. 6 3
      starRTC/src/main/java/com/starrtc/demo/demo/service/KeepLiveService.java

+ 1 - 0
home/src/main/AndroidManifest.xml

@@ -16,6 +16,7 @@
         <activity android:name="com.wdkl.ncs.android.component.home.activity.RTCVoipAudioActivity" />
         <activity android:name=".activity.EventActivity" />
         <activity android:name=".activity.WatchEventDetailActivity"/>
+        <activity android:name=".activity.UserSettingActivity"/>
         <service android:name="com.starrtc.demo.demo.service.KeepLiveService">
             <intent-filter>
                 <action android:name="com.starrtc.demo.service.KeepLiveService" />

+ 6 - 3
home/src/main/code/com/wdkl/ncs/android/component/home/activity/EventActivity.kt

@@ -8,11 +8,13 @@ import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.databinding.WatchActivityEventBinding
 import com.wdkl.ncs.android.component.home.databinding.WatchActivityHomeBinding
 import com.wdkl.ncs.android.component.home.launch.HomeLaunch
+import com.wdkl.ncs.android.component.home.util.MediaPlayHelper
 import com.wdkl.ncs.android.component.nursehome.common.Constants
 import com.wdkl.ncs.android.component.nursehome.util.MediaPlayer
 import com.wdkl.ncs.android.component.nursehome.util.TimeTransition
 import com.wdkl.ncs.android.lib.base.BaseActivity
 import com.wdkl.ncs.android.lib.utils.showMessage
+import com.wdkl.ncs.android.middleware.api.ApiManager
 import com.wdkl.ncs.android.middleware.logic.contract.home.WatchHomeActivityContract
 import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchHomeActivityPresenter
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
@@ -203,9 +205,10 @@ class EventActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivityEven
             if (!Constants.ids.equals("")) {
                 var imUtilTcpModel = ImUtil.imRead(Constants.ids.toInt(), interactionVO!!.fromDeviceId, interactionVO!!.id)
                 TcpClient.getInstance().sendMsg(imUtilTcpModel.toJson())
-                var mediaPlayer = MediaPlayer()
-                mediaPlayer.startMediaPlayer(Constants.eth_ip + interactionVO!!.data)
-                mediaPlayer.setVolume(0.3f)
+                //var mediaPlayer = MediaPlayer()
+                //mediaPlayer.startMediaPlayer(Constants.eth_ip + interactionVO!!.data)
+                //mediaPlayer.setVolume(0.3f)
+                MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url +interactionVO!!.data,1f,false)
 
             } else {
                 showMessage("获取不到当给前设备id")

+ 24 - 5
home/src/main/code/com/wdkl/ncs/android/component/home/activity/RTCVoipAudioActivity.java

@@ -1,5 +1,6 @@
 package com.wdkl.ncs.android.component.home.activity;
 
+import android.app.Activity;
 import android.content.DialogInterface;
 import android.os.Bundle;
 import android.os.SystemClock;
@@ -18,6 +19,7 @@ import com.starrtc.demo.database.HistoryBean;
 import com.starrtc.demo.demo.BaseActivity;
 import com.starrtc.demo.demo.MLOC;
 import com.starrtc.demo.utils.AEvent;
+import com.starrtc.demo.utils.IEventListener;
 import com.starrtc.starrtcsdk.api.XHClient;
 import com.starrtc.starrtcsdk.api.XHConstants;
 import com.starrtc.starrtcsdk.api.XHVoipManager;
@@ -25,7 +27,9 @@ import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback;
 import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager;
 import com.starrtc.starrtcsdk.core.pusher.XHCameraRecorder;
 import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
 import com.wdkl.ncs.android.component.nursehome.common.Constants;
+import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
 import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel;
@@ -42,7 +46,7 @@ import org.greenrobot.eventbus.ThreadMode;
 import java.text.SimpleDateFormat;
 import java.util.Set;
 
-public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickListener {
+public class RTCVoipAudioActivity extends Activity implements View.OnClickListener, IEventListener {
     private String TAG = RTCVoipAudioActivity.class.getSimpleName();
 
     private XHVoipManager voipManager;
@@ -140,6 +144,7 @@ public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickLi
             onPickup();
         } else if (action.equals(CALL)) {
             Log.i(TAG,"等待接听");
+            MediaPlayHelper.getInstance().playResMusic(R.raw.outgoing_call, 0.6f, true);
         }
     }
 
@@ -226,6 +231,7 @@ public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickLi
 
     @Override
     public void onDestroy() {
+        MediaPlayHelper.getInstance().stopMusic();
         removeListener();
         //todo 状态设置为未在通话中
         DeviceChannel.calling = false;
@@ -265,7 +271,7 @@ public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickLi
 
     @Override
     public void dispatchEvent(String aEventID, boolean success, final Object eventObj) {
-        super.dispatchEvent(aEventID, success, eventObj);
+        //super.dispatchEvent(aEventID, success, eventObj);
         switch (aEventID) {
             case AEvent.AEVENT_VOIP_REV_BUSY:
                 MLOC.d("", "对方线路忙");
@@ -302,6 +308,7 @@ public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickLi
     }
 
     private void showTalkingView() {
+        MediaPlayHelper.getInstance().stopMusic();
         MLOC.d("", "showTalkingView");
 //        findViewById(com.starrtc.demo.R.id.calling_txt).setVisibility(View.INVISIBLE);
         findViewById(R.id.call_duration_tv).setVisibility(View.VISIBLE);
@@ -371,6 +378,7 @@ public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickLi
     }
 
     private void stopAndFinish() {
+        MediaPlayHelper.getInstance().stopMusic();
         if (starRTCAudioManager != null) {
             starRTCAudioManager.stop();
         }
@@ -389,6 +397,7 @@ public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickLi
             TcpModel tcpModel = (TcpModel) messageEvent.getMessage();
 
             if (tcpModel.getAction() == TcpAction.VoiceAction.ACCEPT){
+                MediaPlayHelper.getInstance().stopMusic();
                 Log.i(TAG,"对方接听电话啦");
                 //data 是 InteractionVO
 //                Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
@@ -397,11 +406,21 @@ public class RTCVoipAudioActivity extends BaseActivity implements View.OnClickLi
                 audioCall();
 
             } else if (tcpModel.getAction() == TcpAction.VoiceAction.REJECT){
-                voiceStatus.setText("对方拒绝接听");
+                //voiceStatus.setText("对方拒绝接听");
+                ExtendMethodsKt.showMessage("对方拒绝接听");
+                stopAndFinish();
             } else if (tcpModel.getAction() == TcpAction.VoiceAction.CALLING){
-                voiceStatus.setText("对方正在通话");
+                //voiceStatus.setText("对方正在通话");
+                ExtendMethodsKt.showMessage("对方正在通话");
+                stopAndFinish();
             } else if (tcpModel.getAction() == TcpAction.VoiceAction.FAILED){
-                voiceStatus.setText("对方拒绝");
+                //voiceStatus.setText("对方拒绝");
+                ExtendMethodsKt.showMessage("呼叫失败,对方可能不在线");
+                stopAndFinish();
+            } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL){
+                //voiceStatus.setText("对方拒绝");
+                ExtendMethodsKt.showMessage("对方取消呼叫");
+                stopAndFinish();
             }
         }
     }

+ 45 - 6
home/src/main/code/com/wdkl/ncs/android/component/home/activity/RTCVoipAudioRingingActivity.java

@@ -1,7 +1,9 @@
 package com.wdkl.ncs.android.component.home.activity;
 
+import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.TextView;
@@ -13,23 +15,33 @@ import com.starrtc.demo.database.HistoryBean;
 import com.starrtc.demo.demo.BaseActivity;
 import com.starrtc.demo.demo.MLOC;
 import com.starrtc.demo.utils.AEvent;
+import com.starrtc.demo.utils.IEventListener;
 import com.starrtc.starrtcsdk.api.XHClient;
 import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback;
 import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
 import com.wdkl.ncs.android.component.nursehome.common.Constants;
+import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
 import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel;
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction;
+import com.wdkl.ncs.android.middleware.utils.MessageEvent;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
 
 import java.text.SimpleDateFormat;
 
-public class RTCVoipAudioRingingActivity extends BaseActivity implements View.OnClickListener {
+public class RTCVoipAudioRingingActivity extends Activity implements View.OnClickListener, IEventListener {
 
     private String targetId;
     private InteractionVO interactionVO = new InteractionVO();
     private TcpModel tcpModel = new TcpModel();
+    private TextView bao_mother_name_tv;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -43,15 +55,16 @@ public class RTCVoipAudioRingingActivity extends BaseActivity implements View.On
         addListener();
         targetId = getIntent().getStringExtra("targetId");
         tcpModel = (TcpModel) getIntent().getSerializableExtra("TcpModel");
+        bao_mother_name_tv = findViewById(R.id.bao_mother_name_tv);
+        interactionVO =  new Gson().fromJson(tcpModel.getData().toString(), InteractionVO.class);
 
+        TextView eventText = (TextView) findViewById(R.id.event_text);
+        eventText.setText(interactionVO.getFromFrameFullName());
         if (Strings.isNullOrEmpty(targetId)){
             findViewById(R.id.hang_up_imagev).setVisibility(View.GONE);
             findViewById(R.id.call_the_voice_imagev).setVisibility(View.GONE);
-
-            interactionVO =  new Gson().fromJson(tcpModel.getData().toString(), InteractionVO.class);
-            TextView eventText = (TextView) findViewById(R.id.event_text);
-            eventText.setText(interactionVO.getData());
         } else {
+            bao_mother_name_tv.setText(interactionVO.getFromMemberName());
             findViewById(R.id.hang_up_imagev).setOnClickListener(this);
             findViewById(R.id.call_the_voice_imagev).setOnClickListener(this);
         }
@@ -69,6 +82,9 @@ public class RTCVoipAudioRingingActivity extends BaseActivity implements View.On
         historyBean.setNewMsgCount(1);
         MLOC.addHistory(historyBean,true);
 
+        MediaPlayHelper.getInstance().playResMusic(R.raw.incoming_call, 1.0f, true);
+
+        EventBus.getDefault().register(this);
     }
 
     public void addListener(){
@@ -83,7 +99,7 @@ public class RTCVoipAudioRingingActivity extends BaseActivity implements View.On
 
     @Override
     public void dispatchEvent(final String aEventID, boolean success, final Object eventObj) {
-        super.dispatchEvent(aEventID,success,eventObj);
+        //super.dispatchEvent(aEventID,success,eventObj);
         switch (aEventID){
             case AEvent.AEVENT_VOIP_REV_HANGUP:
                 MLOC.d("","对方已挂断");
@@ -112,9 +128,16 @@ public class RTCVoipAudioRingingActivity extends BaseActivity implements View.On
     }
 
     @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        EventBus.getDefault().unregister(this);
+    }
+
+    @Override
     public void onClick(View v) {
         int id = v.getId();
         if (id == R.id.hang_up_imagev) {
+            MediaPlayHelper.getInstance().stopMusic();
             //todo 给服务器发送拒接 tcp
 //            InteractionVO interactionVO = (InteractionVO) tcpModel.getData();
             InteractionVO interactionVO =  new Gson().fromJson(tcpModel.getData().toString(), InteractionVO.class);
@@ -134,6 +157,7 @@ public class RTCVoipAudioRingingActivity extends BaseActivity implements View.On
                 }
             });
         } else if (id == R.id.call_the_voice_imagev) {
+            MediaPlayHelper.getInstance().stopMusic();
             //todo 给服务器发送接听 tcp
 //            InteractionVO interactionVO = (InteractionVO) tcpModel.getData();
             InteractionVO interactionVO =  new Gson().fromJson(tcpModel.getData().toString(), InteractionVO.class);
@@ -150,4 +174,19 @@ public class RTCVoipAudioRingingActivity extends BaseActivity implements View.On
             finish();
         }
     }
+
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void onMoonEvent(MessageEvent messageEvent) {
+        if (messageEvent.getTag() == 2){
+            TcpModel tcpModel = (TcpModel) messageEvent.getMessage();
+
+            if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL || tcpModel.getAction() == TcpAction.VoiceAction.HANDOFF){
+                //voiceStatus.setText("对方拒绝");
+                ExtendMethodsKt.showMessage("通话取消");
+                MediaPlayHelper.getInstance().stopMusic();
+                RTCVoipAudioRingingActivity.this.finish();
+            }
+        }
+    }
 }

+ 58 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/activity/UserSettingActivity.java

@@ -0,0 +1,58 @@
+package com.wdkl.ncs.android.component.home.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.util.AppUtils;
+import com.wdkl.ncs.android.component.home.util.NetHelper;
+import com.wdkl.ncs.android.component.nursehome.common.Constants;
+import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+
+public class UserSettingActivity extends Activity {
+
+    private TextView tvDeviceId;
+    private TextView tvDeviceMac;
+    private TextView tvDeviceIp;
+    private TextView tvDeviceUser;
+    private Button btnChange;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.user_setting_layout);
+
+        tvDeviceId = findViewById(R.id.tv_device_id);
+        tvDeviceMac = findViewById(R.id.tv_device_mac);
+        tvDeviceIp = findViewById(R.id.tv_device_ip);
+        tvDeviceUser = findViewById(R.id.tv_device_user_name);
+        btnChange = findViewById(R.id.btn_user_change);
+
+        tvDeviceId.setText("设备ID: " + Constants.Companion.getIds());
+        tvDeviceMac.setText("设备MAC: " + Constants.Companion.getMac());
+        tvDeviceIp.setText("设备IP: " + NetHelper.getInstance().getLocalIP());
+        tvDeviceUser.setText("当前用户: " + Constants.Companion.getUser_name());
+
+        btnChange.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                TcpModel userChangeModel = DeviceUtil.userChange(Integer.parseInt(Constants.Companion.getIds()));
+                TcpClient.getInstance().sendMsg(userChangeModel.toJson());
+                ExtendMethodsKt.showMessage("换班通知发送成功,请等待处理...");
+                UserSettingActivity.this.finish();
+            }
+        });
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+    }
+}

+ 1 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt

@@ -106,7 +106,7 @@ class WatchCallRecordsActivity : BaseActivity<WatchCallRecordsFragmentPresenter,
             presenter.loadFloor(initiator, 1, 30,Constants.ids.toInt(),customerId.toInt(),-1)
             call_relyout.setOnClickListener{
                 Log.i(TAG, "call_relyout click 111")
-                var tcpModel = VoiceUtil.voiceCall(Integer.parseInt(Constants.ids),21)
+                var tcpModel = VoiceUtil.voiceCall(Integer.parseInt(Constants.ids),receivedData!!.deviceId)
                 TcpClient.getInstance().sendMsg(tcpModel.toJson())
             }
         }

+ 23 - 13
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchEventDetailActivity.kt

@@ -20,6 +20,8 @@ import com.wdkl.ncs.android.lib.base.BaseActivity
 import com.wdkl.ncs.android.lib.base.BaseContract
 import com.wdkl.ncs.android.lib.utils.push
 import com.wdkl.ncs.android.lib.utils.showMessage
+import com.wdkl.ncs.android.middleware.api.ApiManager
+import com.wdkl.ncs.android.middleware.api.UrlManager
 import com.wdkl.ncs.android.middleware.logic.contract.home.WatchHomeActivityContract
 import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchHomeActivityPresenter
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
@@ -76,14 +78,14 @@ class WatchEventDetailActivity: BaseActivity<WatchHomeActivityPresenter, WatchAc
 
     override fun bindEvent() {
         back.setOnClickListener {
-            push("/watch/callrecords", { postcard ->
-                postcard.withString("action","UNREAD")
-                postcard.withString("customer_id","")
+//            push("/watch/callrecords", { postcard ->
+//                postcard.withString("action","UNREAD")
+//                postcard.withString("customer_id","")
                 finish()
-            })
+//            })
         }
         event_status_img.setOnClickListener {
-            event_status_img.isEnabled = false
+            //event_status_img.isEnabled = false
             if (tcpModel?.type == TcpType.EVENT) {
                 var tcpModel = EventUtil.eventResponse(Integer.parseInt(Constants.ids), interactionVO!!.fromDeviceId, interactionVO!!.id)
                 TcpClient.getInstance().sendMsg(tcpModel.toJson())
@@ -91,12 +93,19 @@ class WatchEventDetailActivity: BaseActivity<WatchHomeActivityPresenter, WatchAc
                 //todo: 语音播放
 
                 if (!Constants.ids.equals("")) {
-                    var imUtilTcpModel = ImUtil.imRead(Constants.ids.toInt(), interactionVO!!.fromDeviceId, interactionVO!!.id)
-                    TcpClient.getInstance().sendMsg(imUtilTcpModel.toJson())
-//                    var mediaPlayer = MediaPlayer()
+                    if(interactionVO!!.actionEnd  ==null){
+                        var imUtilTcpModel = ImUtil.imRead(Constants.ids.toInt(), interactionVO!!.fromDeviceId, interactionVO!!.id)
+                        TcpClient.getInstance().sendMsg(imUtilTcpModel.toJson())
+                        var mediaPlayer = MediaPlayer()
 //                    mediaPlayer.startMediaPlayer( Constants.eth_ip +interactionVO!!.data)
 //                    mediaPlayer.setVolume(0.3f)
-                    MediaPlayHelper.getInstance().playUrlMusic(Constants.eth_ip +interactionVO!!.data,1f,false)
+                        //MediaPlayHelper.getInstance().playUrlMusic(Constants.eth_ip +interactionVO!!.data,1f,false)
+                        MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url +interactionVO!!.data,1f,false)
+                    }else{
+                        MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url +interactionVO!!.data,1f,false)
+                    }
+
+//
                 }else{
                     showMessage("获取不到当给前设备id")
                 }
@@ -121,13 +130,14 @@ class WatchEventDetailActivity: BaseActivity<WatchHomeActivityPresenter, WatchAc
 
             if (tcpModel?.type == TcpType.IM){
                 event_text.setText("语音留言")
+                event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live)
                 if (interactionVO?.actionEnd != null) {
                     event_end_text.setText(TimeTransition().stampToDate(interactionVO!!.actionEnd*1000))
-                    event_status_img.isEnabled = false
-                    event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live_item)
-                } else {
+                    //event_status_img.isEnabled = false
+                    //event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live_item)
+                } /*else {
                     event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live)
-                }
+                }*/
             } else if (tcpModel?.type == TcpType.EVENT){
                 event_text.setText(interactionVO?.data)
 

+ 17 - 3
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchHomeActivity.kt

@@ -20,6 +20,7 @@ import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.databinding.WatchActivityHomeBinding
 import com.wdkl.ncs.android.component.home.launch.HomeLaunch
 import com.wdkl.ncs.android.component.home.util.NetHelper
+import com.wdkl.ncs.android.component.nursehome.common.Constants
 import com.wdkl.ncs.android.lib.base.BaseActivity
 import com.wdkl.ncs.android.lib.utils.AppTool
 import com.wdkl.ncs.android.lib.utils.push
@@ -41,7 +42,7 @@ import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 
 @Router(path = "/watch/home")
-class WatchHomeActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivityHomeBinding>(), WatchHomeActivityContract.View, View.OnClickListener {
+class WatchHomeActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivityHomeBinding>(), WatchHomeActivityContract.View, View.OnClickListener, View.OnLongClickListener {
     var TAG = WatchHomeActivity::class.java.getSimpleName()
 
     //监听网络变化
@@ -64,11 +65,14 @@ class WatchHomeActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivity
 
         Thread ( Runnable {
             run {
-                TcpClient.getInstance().init("192.168.1.138", 5080, 9)
+                //TcpClient.getInstance().init("192.168.1.138", 5080, 9)
 //                TcpClient.getInstance().init("47.106.200.55", 5080, 9)
+                TcpClient.getInstance().init(Constants.tcp_server, Constants.tcp_port, Constants.heart_beat)
             }
         }).start()
 
+        watch_name_tv.text = Constants.user_name
+
         wifiManager = (applicationContext.getSystemService(Context.WIFI_SERVICE)) as WifiManager
         teleManager = (applicationContext.getSystemService(Context.TELEPHONY_SERVICE)) as TelephonyManager
 
@@ -108,7 +112,7 @@ class WatchHomeActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivity
         call_records_linlyout.setOnClickListener(this)
         user_nume_linlyout.setOnClickListener(this)
         state_linlyout.setOnClickListener(this)
-
+        user_nume_linlyout.setOnLongClickListener(this)
     }
 
     override fun destory() {
@@ -161,6 +165,16 @@ class WatchHomeActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivity
         }
     }
 
+    override fun onLongClick(p0: View): Boolean {
+        when (p0.id) {
+            R.id.user_nume_linlyout ->{
+                val intent = Intent(this, UserSettingActivity::class.java)
+                startActivity(intent)
+            }
+        }
+        return true
+    }
+
 
     // ====================================== 处理tcp
     var calling :Boolean=false

+ 14 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchRegisterActivity.kt

@@ -26,10 +26,12 @@ import com.wdkl.ncs.android.middleware.logic.contract.home.WatchDeviceContract
 import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchActivityPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchDevicePresenter
 import com.wdkl.ncs.android.middleware.model.dos.DeviceDO
+import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import com.wdkl.ncs.android.middleware.model.vo.WatchContactsVO
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.utils.MessageEvent
 import io.reactivex.Observable
+import kotlinx.android.synthetic.main.watch_activity_register.*
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 
@@ -46,9 +48,12 @@ class WatchRegisterActivity: BaseActivity<WatchDevicePresenter, WatchActivityReg
     }
 
     override fun init() {
-//        Constants.mac = NetHelper.getInstance().macAddress
-        Constants.mac = "4C:C0:0A:8E:D6:BB"
+        Constants.mac = NetHelper.getInstance().macAddress
+        //Constants.mac = "4C:C0:0A:8E:D6:BB"
         Log.e(TAG,"mac "+Constants.mac)
+        tv_mac_addr.text = "MAC地址: " + Constants.mac
+
+        presenter.loadTcpServerHost()
 
         requestPermissions()
     }
@@ -59,11 +64,18 @@ class WatchRegisterActivity: BaseActivity<WatchDevicePresenter, WatchActivityReg
     override fun destory() {
     }
 
+    override fun setTcpServerHost(tcpSeverDTO: TcpSeverDTO) {
+        Constants.tcp_server = tcpSeverDTO.tcpServer
+        Constants.tcp_port = tcpSeverDTO.tcpPort
+        Constants.heart_beat = tcpSeverDTO.readerIdleTime
+    }
+
     override fun showData(data: DeviceDO) {
         Log.e(TAG,"收到返回的设备信息 ")
         Constants.ids = ""+data.id
         Constants.sip_id =data.sipId
         Constants.eth_ip = "192.168.1.138:8006/"
+        Constants.user_name = data.memberName
         //这里的是视频通话有关的
         AEvent.setHandler(Handler())
         //这里的是视频通话有关的

+ 9 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/service/TcpHandleService.kt

@@ -8,6 +8,7 @@ import com.google.gson.FieldNamingPolicy
 import com.google.gson.GsonBuilder
 import com.wdkl.ncs.android.component.home.activity.RTCVoipAudioRingingActivity
 import com.wdkl.ncs.android.component.home.activity.WatchEventDetailActivity
+import com.wdkl.ncs.android.component.home.util.AppUtils
 import com.wdkl.ncs.android.lib.utils.push
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
@@ -23,10 +24,14 @@ class TcpHandleService : Service(){
 
     override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
         Log.i("TcpHandleService", "已经启动")
-        EventBus.getDefault().register(this)
         return super.onStartCommand(intent, flags, startId)
     }
 
+    override fun onCreate() {
+        super.onCreate()
+        EventBus.getDefault().register(this)
+    }
+
     override fun onDestroy() {
         EventBus.getDefault().unregister(this)
         super.onDestroy()
@@ -49,6 +54,9 @@ class TcpHandleService : Service(){
             //todo: 不优雅的传输,应该直接传递对象
             intent.putExtra("tcpModelStr",tcpModel.toJson())
             startActivity(intent)
+        } else if (messageEvent.tag == 4) {
+            //重新刷新数据
+            AppUtils.restartApp()
         }
     }
 }

+ 31 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/util/AppUtils.java

@@ -0,0 +1,31 @@
+package com.wdkl.ncs.android.component.home.util;
+
+import android.annotation.SuppressLint;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import com.wdkl.ncs.android.component.home.activity.WatchRegisterActivity;
+import com.wdkl.ncs.android.lib.base.BaseApplication;
+
+public class AppUtils {
+
+    public static void restartApp() {
+        try {
+            Log.i("AppUtil", "restartApp ======================");
+            Intent intent = new Intent(BaseApplication.appContext, WatchRegisterActivity.class);
+            @SuppressLint("WrongConstant") PendingIntent mPendingIntent = PendingIntent.getActivity(
+                    BaseApplication.appContext, 0, intent,
+                    Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+            AlarmManager mgr = (AlarmManager) BaseApplication.appContext.getSystemService(Context.ALARM_SERVICE);
+            mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1500, mPendingIntent);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        android.os.Process.killProcess(android.os.Process.myPid());
+        System.exit(0);
+    }
+}

+ 19 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/util/NetHelper.java

@@ -15,6 +15,7 @@ import com.wdkl.ncs.android.lib.base.BaseApplication;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.SocketException;
@@ -514,6 +515,24 @@ public class NetHelper {
         return ip;
     }
 
+    //获取本地ip地址
+    public String getLocalIP() {
+        try {
+            for (Enumeration<NetworkInterface> enNetI = NetworkInterface.getNetworkInterfaces(); enNetI.hasMoreElements(); ) {
+                NetworkInterface netI = enNetI.nextElement();
+                for (Enumeration<InetAddress> enumIpAddr = netI.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
+                    InetAddress inetAddress = enumIpAddr.nextElement();
+                    if (inetAddress instanceof Inet4Address && !inetAddress.isLoopbackAddress()) {
+                        return inetAddress.getHostAddress();
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
     public int getNetworkType() {
         if (connManager != null && connManager.getActiveNetworkInfo() != null) {
             return connManager.getActiveNetworkInfo().getType();

+ 1 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/util/TimeTransition.kt

@@ -8,7 +8,7 @@ import java.util.*
 class TimeTransition {
 
     fun stampToDate(s:Long):String{
-        return TimeStampToTime(s,"yyyy-MM-dd HH:mm:ss")
+        return TimeStampToTime(s,"MM-dd HH:mm")
     }
 
     fun stampToTime(s:Long):String{

+ 5 - 0
home/src/main/res/drawable/selector_button_text_color.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="#ffffff" android:state_pressed="true"/>
+    <item android:color="#202020"/>
+</selector>

+ 49 - 0
home/src/main/res/layout/user_setting_layout.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/tv_device_id"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_marginLeft="20dp"
+        android:text="设备ID: --"/>
+
+    <TextView
+        android:id="@+id/tv_device_mac"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_marginLeft="20dp"
+        android:text="设备MAC: --"/>
+
+    <TextView
+        android:id="@+id/tv_device_ip"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_marginLeft="20dp"
+        android:text="设备IP: --"/>
+
+    <TextView
+        android:id="@+id/tv_device_user_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_marginLeft="20dp"
+        android:text="当前用户: 王护士"/>
+
+    <Button
+        android:id="@+id/btn_user_change"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_gravity="center_horizontal"
+        android:background="#00B5DC"
+        android:text="换班"
+        android:textColor="@drawable/selector_button_text_color"/>
+</LinearLayout>

+ 4 - 4
home/src/main/res/layout/watch_activity_call_records.xml

@@ -28,14 +28,14 @@
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
             android:layout_centerHorizontal="true"
-            android:background="@drawable/hu_jiao_bg"
+            android:layout_marginBottom="16dp"
             android:visibility="gone">
 
             <ImageView
-                android:layout_width="200dp"
-                android:layout_height="200dp"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
                 android:layout_centerInParent="true"
-                android:background="@drawable/hu_jiao" />
+                android:background="@drawable/yu_yin_jie_ting" />
         </RelativeLayout>
     </RelativeLayout>
 </layout>

+ 11 - 8
home/src/main/res/layout/watch_activity_dialing_voice.xml

@@ -5,16 +5,18 @@
     android:background="#FFE6E8">
 
     <LinearLayout
+        android:id="@+id/ll_name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
+        android:gravity="center_horizontal"
         android:layout_marginTop="11px"
         android:orientation="vertical">
 
         <ImageView
             android:id="@+id/bao_mother_image_imagev"
-            android:layout_width="280dp"
-            android:layout_height="280dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:src="@drawable/bao_ma_tou_xiang" />
 
         <TextView
@@ -24,13 +26,14 @@
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
             android:text="宝妈名字"
-            android:textSize="50dp" />
+            android:textSize="20sp" />
 
     </LinearLayout>
 
     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_below="@id/ll_name"
         android:layout_alignParentBottom="true"
         android:layout_centerHorizontal="true"
         android:layout_marginBottom="11px"
@@ -41,8 +44,8 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
-            android:text="00:00:12"
-            android:textSize="45dp" />
+            android:text="00:00"
+            android:textSize="12sp" />
 
         <TextView
             android:id="@+id/voice_status"
@@ -50,12 +53,12 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:textSize="50dp" />
+            android:textSize="12sp" />
 
         <ImageView
             android:id="@+id/hang_up_imagev"
-            android:layout_width="200dp"
-            android:layout_height="200dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:layout_marginTop="13px"
             android:src="@drawable/yu_yin_gua_duan" />
 

+ 16 - 14
home/src/main/res/layout/watch_activity_event_detail.xml

@@ -6,6 +6,7 @@
     android:background="#FFE6E8">
 
     <LinearLayout
+        android:id="@+id/ll_title_name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
@@ -14,8 +15,8 @@
 
         <ImageView
             android:id="@+id/bao_mother_image_imagev"
-            android:layout_width="280dp"
-            android:layout_height="280dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:src="@drawable/bao_ma_tou_xiang" />
 
         <TextView
@@ -23,18 +24,18 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
-            android:layout_marginTop="8px"
+            android:layout_marginTop="2px"
             android:text=""
-            android:textSize="40dp" />
+            android:textSize="16sp" />
 
         <TextView
             android:id="@+id/event_text"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
-            android:layout_marginTop="18px"
-            android:text=""
-            android:textSize="50dp" />
+            android:layout_marginTop="2px"
+            android:text="11"
+            android:textSize="16sp" />
 
     </LinearLayout>
 
@@ -44,15 +45,16 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_above="@+id/call_out_linlyout"
+        android:layout_below="@id/ll_title_name"
         android:layout_centerHorizontal="true"
-        android:text=""
-        android:textSize="40dp"
+        android:text="11"
+        android:textSize="14sp"
         android:visibility="gone"/>
 
     <LinearLayout
         android:id="@+id/call_out_linlyout"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="54dp"
         android:layout_alignParentBottom="true"
         android:layout_centerHorizontal="true"
         android:layout_marginTop="13px"
@@ -61,8 +63,8 @@
 
         <ImageView
             android:id="@+id/back"
-            android:layout_width="100dp"
-            android:layout_height="200dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:src="@drawable/btn_back" />
 
         <LinearLayout
@@ -78,8 +80,8 @@
                 android:text=""/>
             <ImageView
                 android:id="@+id/event_status_img"
-                android:layout_width="200dp"
-                android:layout_height="200dp"
+                android:layout_width="60px"
+                android:layout_height="30px"
                 android:layout_marginLeft="20px"
                 android:layout_marginRight="0dp"
                 android:src="@drawable/icon_switch_off" />

+ 1 - 1
home/src/main/res/layout/watch_activity_home.xml

@@ -168,7 +168,7 @@
                                 android:id="@+id/electric_quantity_tv"
                                 android:layout_width="wrap_content"
                                 android:layout_height="wrap_content"
-                                android:text="电量100%"
+                                android:text="100%"
                                 android:textColor="#ffffff"
                                 android:textSize="16px" />
                         </LinearLayout>

+ 15 - 6
home/src/main/res/layout/watch_activity_register.xml

@@ -2,12 +2,21 @@
 <layout>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
-<TextView
-    android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:layout_marginTop="40dp"
-    android:textSize="20dp"
-    android:text="注册页面"/>
+    android:padding="10dp"
+    android:orientation="vertical">
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="40dp"
+        android:textSize="20dp"
+        android:text="注册页面"/>
+    <TextView
+        android:id="@+id/tv_mac_addr"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="20dp"
+        android:textSize="20dp"
+        android:text="MAC地址: "/>
 </LinearLayout>
 </layout>

+ 12 - 11
home/src/main/res/layout/watch_activity_voice_calls.xml

@@ -9,12 +9,13 @@
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
         android:layout_marginTop="11px"
-        android:orientation="vertical">
+        android:orientation="vertical"
+        android:gravity="center_horizontal">
 
         <ImageView
             android:id="@+id/bao_mother_image_imagev"
-            android:layout_width="280dp"
-            android:layout_height="280dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:src="@drawable/bao_ma_tou_xiang" />
 
         <TextView
@@ -24,7 +25,7 @@
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
             android:text="宝妈名字"
-            android:textSize="50dp" />
+            android:textSize="20sp" />
 
         <TextView
             android:id="@+id/event_text"
@@ -33,7 +34,7 @@
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
             android:text=""
-            android:textSize="45dp" />
+            android:textSize="20sp" />
 
     </LinearLayout>
 
@@ -45,7 +46,7 @@
         android:layout_above="@+id/call_out_linlyout"
         android:layout_centerHorizontal="true"
         android:text=""
-        android:textSize="40dp"
+        android:textSize="24sp"
         android:visibility="gone"/>
 
     <LinearLayout
@@ -60,15 +61,15 @@
 
         <ImageView
             android:id="@+id/hang_up_imagev"
-            android:layout_width="200dp"
-            android:layout_height="200dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:src="@drawable/yu_yin_gua_duan" />
 
         <ImageView
             android:id="@+id/call_the_voice_imagev"
-            android:layout_width="200dp"
-            android:layout_height="200dp"
-            android:layout_marginLeft="20px"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="28px"
             android:src="@drawable/yu_yin_jie_ting" />
 
     </LinearLayout>

二進制
home/src/main/res/raw/incoming_call.mp3


二進制
home/src/main/res/raw/outgoing_call.mp3


+ 1 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/api/ApiManager.kt

@@ -26,7 +26,7 @@ object ApiManager {
          * @Type  UrlManager
          * @Note  服务器URL控制器
          */
-        private val urlManager = UrlManager.build()
+        public val urlManager = UrlManager.build()
 
         /** 全局分页条数 */
         val PAGE_SIZE = 10

+ 3 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/api/RegisterDeviceApi.kt

@@ -12,5 +12,7 @@ interface RegisterDeviceApi {
     @GET("/watch/device/getDeviceByEthMac/{eth_mac}")
     fun getDeviceMessage(@Path("eth_mac")eth_mac:String): Observable<ResponseBody>
 
-
+    //tcp服务器地址
+    @GET("ncs_url/getHostIP")
+    fun getTcpServerHost(): Observable<ResponseBody>
 }

+ 3 - 2
middleware/src/main/code/com/wdkl/ncs/android/middleware/api/UrlManager.kt

@@ -54,10 +54,11 @@ interface UrlManager {
 private class DevUrlManager : UrlManager{
 
     override val base: String
-        get() = "http://192.168.1.138"
+        //get() = "http://192.168.1.138"
+        get() = "http://dev.base.wdklian.com"
 
     override val device_url: String
-        get() = "${base}:8006/"
+        get() = "${base}:6005/"
 
     override val basic: String
         get() = "${base}:7002/"

+ 4 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constants.kt

@@ -7,6 +7,10 @@ class Constants {
         var eth_ip: String ="" //当前设备的IP
         var ids: String =""//当前设备的ID
         var sip_id: String =""//sip
+        var user_name: String? = "" //当前用户
+        var tcp_server: String? = "192.168.1.138"
+        var tcp_port: Int = 5080
+        var heart_beat: Int = 9
 
     }
 

+ 6 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/logic/contract/home/WatchDeviceContract.kt

@@ -3,6 +3,7 @@ package com.wdkl.ncs.android.middleware.logic.contract.home
 import com.wdkl.ncs.android.lib.base.BaseContract
 import com.wdkl.ncs.android.middleware.model.dos.BroadcastDO
 import com.wdkl.ncs.android.middleware.model.dos.DeviceDO
+import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 
 /**
  * 获取当前设备数据接口
@@ -13,13 +14,17 @@ interface WatchDeviceContract {
      */
     interface View: BaseContract.BaseView{
         fun showData(data : DeviceDO)
+
+        fun setTcpServerHost(tcpSeverDTO: TcpSeverDTO)
     }
 
     /**
      * 获取当前设备数据
      */
   interface Presenter:BaseContract.BasePresenter{
-      fun loadData(eth_mac:String)
+        fun loadData(eth_mac:String)
+        //获取tcp服务器地址
+        fun loadTcpServerHost()
   }
 
 

+ 26 - 2
middleware/src/main/code/com/wdkl/ncs/android/middleware/logic/presenter/home/WatchDevicePresenter.kt

@@ -11,6 +11,7 @@ import com.wdkl.ncs.android.middleware.api.RegisterDeviceApi
 import com.wdkl.ncs.android.middleware.di.MiddlewareDaggerComponent
 import com.wdkl.ncs.android.middleware.logic.contract.home.WatchDeviceContract
 import com.wdkl.ncs.android.middleware.model.dos.DeviceDO
+import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import io.reactivex.disposables.Disposable
 import javax.inject.Inject
 
@@ -42,8 +43,19 @@ class WatchDevicePresenter@Inject constructor() :RxPresenter<WatchDeviceContract
         }
 
         override fun onNextWithConnection(result: Any, connectionQuality: ConnectionQuality) {
-            providerView().complete()
-            providerView().showData(result as DeviceDO)
+            when (result) {
+                is DeviceDO -> {
+                    providerView().complete()
+                    providerView().showData(result as DeviceDO)
+                }
+
+                is TcpSeverDTO -> {
+                    //tcp服务器地址
+                    providerView().complete("")
+                    providerView().setTcpServerHost(result)
+                }
+            }
+
         }
 
         override fun onErrorWithConnection(error: ExceptionHandle.ResponeThrowable, connectionQuality: ConnectionQuality) {
@@ -72,4 +84,16 @@ class WatchDevicePresenter@Inject constructor() :RxPresenter<WatchDeviceContract
                 .subscribe(observable)
 
     }
+
+    override fun loadTcpServerHost() {
+        registerDeviceApi.getTcpServerHost()
+                .map {
+                    val gson = GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create()
+                    val tcpServer = gson.fromJson(it.getJsonString(), TcpSeverDTO::class.java)
+
+                    return@map tcpServer
+                }
+                .compose(ThreadFromUtils.defaultSchedulers())
+                .subscribe(observable)
+    }
 }

+ 66 - 21
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/dos/DeviceDO.java

@@ -2,13 +2,14 @@ package com.wdkl.ncs.android.middleware.model.dos;
 
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
 import com.fasterxml.jackson.databind.annotation.JsonNaming;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
 import com.wdkl.ncs.android.middleware.model.annotation.Column;
 import com.wdkl.ncs.android.middleware.model.annotation.Id;
 import com.wdkl.ncs.android.middleware.model.annotation.PrimaryKeyField;
 import com.wdkl.ncs.android.middleware.model.annotation.Table;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import java.io.Serializable;
 
 @Table(name = "ncs_device")
@@ -107,6 +108,11 @@ public class DeviceDO implements Serializable {
     @ApiModelProperty(value = "该设备的有线以太网卡分配的IP地址", required = false)
     private String ethIp;
     /**
+     *	该设备的有线以太网卡分配的IP地址端口
+     */	@Column(name = "eth_ip_port" )
+    @ApiModelProperty(value="该设备的有线以太网卡分配的IP地址端口",required=false)
+    private String ethIpPort;
+    /**
      * 该设备的WIFI网卡MAC地址
      */
     @Column(name = "wifi_mac")
@@ -135,7 +141,7 @@ public class DeviceDO implements Serializable {
      */
     @Column(name = "status")
     @ApiModelProperty(value = "该设备是否启用状态:false:表示未启用,设备不进入主界面。true:表示已开启正常使用。", required = false)
-    private String status;
+    private Integer status;
     /**
      * SIP服务器IP地址
      */
@@ -159,7 +165,7 @@ public class DeviceDO implements Serializable {
      */
     @Column(name = "sip_status")
     @ApiModelProperty(value = "表示SIP账号状态:true:可以使用   false:暂停使用", required = false)
-    private String sipStatus;
+    private Boolean sipStatus;
     /**
      * null
      */
@@ -170,12 +176,23 @@ public class DeviceDO implements Serializable {
      *	是否为后备,空或否时为并行
      */	@Column(name = "bool_backup" )
     @ApiModelProperty(value="是否为后备,空或否时为并行",required=false)
-    private String boolBackup;
+    private Boolean boolBackup;
     /**
      *	后备哪个设备,设备id
      */	@Column(name = "backup_id" )
     @ApiModelProperty(value="后备哪个设备,设备id",required=false)
     private Integer backupId;
+    /**
+     *	null
+     */	@Column(name = "priority" )
+    @ApiModelProperty(value="null",required=false)
+    private Integer priority;
+
+    @Column(name = "full_name")
+    @ApiModelProperty(value = "病房病床名称", required = false)
+    private String fullName; // 空间结构全名
+
+    private String memberName; // 使用人(护士腕表)
 
 
     @PrimaryKeyField
@@ -214,6 +231,13 @@ public class DeviceDO implements Serializable {
         this.updateTime = updateTime;
     }
 
+    public String getMemberName() {
+        return memberName;
+    }
+
+    public void setMemberName(String memberName) {
+        this.memberName = memberName;
+    }
 
     public Integer getPartId() {
         return partId;
@@ -314,6 +338,14 @@ public class DeviceDO implements Serializable {
     }
 
 
+    public String getEthIpPort() {
+        return ethIpPort;
+    }
+
+    public void setEthIpPort(String ethIpPort) {
+        this.ethIpPort = ethIpPort;
+    }
+
     public String getWifiMac() {
         return wifiMac;
     }
@@ -350,15 +382,14 @@ public class DeviceDO implements Serializable {
     }
 
 
-    public String getStatus() {
+    public Integer getStatus() {
         return status;
     }
 
-    public void setStatus(String status) {
+    public void setStatus(Integer status) {
         this.status = status;
     }
 
-
     public String getSipIp() {
         return sipIp;
     }
@@ -386,15 +417,6 @@ public class DeviceDO implements Serializable {
     }
 
 
-    public String getSipStatus() {
-        return sipStatus;
-    }
-
-    public void setSipStatus(String sipStatus) {
-        this.sipStatus = sipStatus;
-    }
-
-
     public Integer getMemberId() {
         return memberId;
     }
@@ -404,15 +426,22 @@ public class DeviceDO implements Serializable {
     }
 
 
-    public String getBoolBackup() {
+    public Boolean getSipStatus() {
+        return sipStatus;
+    }
+
+    public void setSipStatus(Boolean sipStatus) {
+        this.sipStatus = sipStatus;
+    }
+
+    public Boolean getBoolBackup() {
         return boolBackup;
     }
 
-    public void setBoolBackup(String boolBackup) {
+    public void setBoolBackup(Boolean boolBackup) {
         this.boolBackup = boolBackup;
     }
 
-
     public Integer getBackupId() {
         return backupId;
     }
@@ -420,4 +449,20 @@ public class DeviceDO implements Serializable {
     public void setBackupId(Integer backupId) {
         this.backupId = backupId;
     }
-}
+
+    public String getFullName() {
+        return fullName;
+    }
+
+    public void setFullName(String fullName) {
+        this.fullName = fullName;
+    }
+
+    public Integer getPriority() {
+        return priority;
+    }
+
+    public void setPriority(Integer priority) {
+        this.priority = priority;
+    }
+}

+ 45 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/dto/TcpSeverDTO.java

@@ -0,0 +1,45 @@
+package com.wdkl.ncs.android.middleware.model.dto;
+
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @title: TcpSevserDTO
+ * @projectName nc
+ * @description: TODO
+ * @date 2021/4/1512:21
+ */
+
+public class TcpSeverDTO implements Serializable {
+
+    private String tcpServer;
+
+    private Integer tcpPort;
+
+    private Integer readerIdleTime;
+
+    public String getTcpServer() {
+        return tcpServer;
+    }
+
+    public void setTcpServer(String tcpServer) {
+        this.tcpServer = tcpServer;
+    }
+
+    public Integer getTcpPort() {
+        return tcpPort;
+    }
+
+    public void setTcpPort(Integer tcpPort) {
+        this.tcpPort = tcpPort;
+    }
+
+    public Integer getReaderIdleTime() {
+        return readerIdleTime;
+    }
+
+    public void setReaderIdleTime(Integer readerIdleTime) {
+        this.readerIdleTime = readerIdleTime;
+    }
+}

+ 5 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceChannel.java

@@ -34,12 +34,16 @@ public class DeviceChannel {
             //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方拒绝并停留3秒,结束至正常界面
             || (tcpModel.getType()== TcpType.VOICE && tcpModel.getAction() == TcpAction.VoiceAction.CALLING) //我方呼出,对方通话中
             //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方占线并停留3秒,结束至正常界面;更新左侧
-            || (tcpModel.getType()== TcpType.VOICE && tcpModel.getAction() == TcpAction.VoiceAction.FAILED)){ //我方呼出,对方不在线,设备离线或其它错误
+            || (tcpModel.getType()== TcpType.VOICE && tcpModel.getAction() == TcpAction.VoiceAction.HANDOFF)
+            || (tcpModel.getType()== TcpType.VOICE && tcpModel.getAction() == TcpAction.VoiceAction.FAILED) //我方呼出,对方不在线,设备离线或其它错误
+            || (tcpModel.getType()== TcpType.VOICE && tcpModel.getAction() == TcpAction.VoiceAction.CANCEL)) { //对方取消
             //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方离线并停留3秒,结束至正常界面;更新左侧
             EventBus.getDefault().post(new MessageEvent(tcpModel, 2));
         } else if ((tcpModel.getType()==TcpType.IM && tcpModel.getAction() == TcpAction.IMAction.MSG)
             || (tcpModel.getType()==TcpType.EVENT && tcpModel.getAction() == TcpAction.EventAction.KEY_CLICK)) {
             EventBus.getDefault().post(new MessageEvent(tcpModel, 3));
+        } else if (tcpModel.getType() == TcpType.DATA && tcpModel.getAction() == TcpAction.DataAction.REFRESH) {
+            EventBus.getDefault().post(new MessageEvent(tcpModel, 4));
         } else {
             EventBus.getDefault().post(new MessageEvent(tcpModel, 0));
         }

+ 8 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceUtil.java

@@ -12,4 +12,12 @@ public class DeviceUtil {
         tcpModel.setData(mac);
         return tcpModel;
     }
+
+    public static TcpModel userChange(Integer fromId){
+        TcpModel tcpModel = new TcpModel();
+        tcpModel.setType(TcpType.DEVICE);
+        tcpModel.setAction(TcpAction.DeviceAction.USER_CHANGE);
+        tcpModel.setFromId(fromId);
+        return tcpModel;
+    }
 }

+ 3 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/TcpAction.java

@@ -43,6 +43,7 @@ public interface TcpAction {
     enum VoiceAction implements TcpAction {
         CALL("呼叫"),
         ACCEPT("接受呼叫"),
+        CANCEL("取消"),
         REJECT("拒绝"),
         CALLING("通话中"),
         TRANSFER("转接"),
@@ -137,7 +138,8 @@ public interface TcpAction {
 
     enum DeviceAction implements TcpAction {
         RESTART("重启"),
-        CONNECT("连接");
+        CONNECT("连接"),
+        USER_CHANGE("用户绑定");
         private String description;
         DeviceAction(String description){
             this.description = description;

+ 6 - 3
starRTC/src/main/java/com/starrtc/demo/demo/service/KeepLiveService.java

@@ -36,7 +36,9 @@ import java.util.Random;
 public class KeepLiveService extends Service implements IEventListener {
     private String TAG = KeepLiveService.class.getSimpleName();
 
+    private XHCustomConfig customConfig;
     private String DeviceSipId = "";
+
     @Nullable
     @Override
     public IBinder onBind(Intent intent) {
@@ -93,7 +95,7 @@ public class KeepLiveService extends Service implements IEventListener {
             }
             addListener();
 
-            XHCustomConfig customConfig =  XHCustomConfig.getInstance(this);
+            customConfig =  XHCustomConfig.getInstance(this);
             customConfig.setChatroomServerUrl(MLOC.CHATROOM_SERVER_URL);
             customConfig.setLiveSrcServerUrl(MLOC.LIVE_SRC_SERVER_URL);
             customConfig.setLiveVdnServerUrl(MLOC.LIVE_VDN_SERVER_URL);
@@ -107,7 +109,7 @@ public class KeepLiveService extends Service implements IEventListener {
 //            customConfig.setDefConfigOpenGLESEnable(false);
 //            customConfig.setDefConfigCameraId(1);//设置默认摄像头方向  0后置  1前置
 //            customConfig.setDefConfigVideoSize(XHConstants.XHCropTypeEnum.STAR_VIDEO_CONFIG_360BW_640BH_180SW_320SH);
-            customConfig.setLogDirPath(Environment.getExternalStorageDirectory().getPath()+"/starrtcLog");
+//            customConfig.setLogDirPath(Environment.getExternalStorageDirectory().getPath()+"/starrtcLog");
 //            customConfig.setDefConfigCamera2Enable(false);
 //            StarCamera.setFrameBufferEnable(false);
             customConfig.initSDKForFree(MLOC.userId, new IXHErrorCallback() {
@@ -118,7 +120,6 @@ public class KeepLiveService extends Service implements IEventListener {
                 }
             },new Handler());
 
-            customConfig.setDefConfigAudioSource(XHConstants.XHAudioSourceEnum.MIC);  //设置默认音源为mic
 
             XHClient.getInstance().getChatManager().addListener(new XHChatManagerListener());
             XHClient.getInstance().getGroupManager().addListener(new XHGroupManagerListener());
@@ -132,6 +133,8 @@ public class KeepLiveService extends Service implements IEventListener {
                 public void success(Object data) {
                     MLOC.d("KeepLiveService","loginSuccess");
                     isLogin = true;
+                    customConfig.setDefConfigAudioSource(XHConstants.XHAudioSourceEnum.MIC);  //设置默认音源为mic
+                    customConfig.setDefConfigAudioBitRate(128);  //设置码率
                 }
                 @Override
                 public void failed(final String errMsg) {