Procházet zdrojové kódy

大朝华7寸分机NFC问题修改,卡尔10寸机当分机用(暂时放到中兴分机模块下),分机通话默认为外放模式

weizhengliang před 1 rokem
rodič
revize
2f7fe0ac93

+ 44 - 6
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/activity/CallingbedActivity.kt

@@ -70,10 +70,7 @@ import com.wdkl.ncs.android.middleware.model.dos.RoleDO
 import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import com.wdkl.ncs.android.middleware.model.vo.*
 import com.wdkl.ncs.android.middleware.tcp.TcpClient
-import com.wdkl.ncs.android.middleware.tcp.channel.ImUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.OtherUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.VideoUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
+import com.wdkl.ncs.android.middleware.tcp.channel.*
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
@@ -190,7 +187,7 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
     private var language = "zh"
 
     companion object {
-        lateinit var instance: CallingbedActivity
+        //lateinit var instance: CallingbedActivity
         var sosItemList = ArrayList<CallingItem>()
         var callingList = ArrayList<CallingItem>()
 
@@ -216,8 +213,9 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
     }
 
     override fun init() {
-        instance = this
+        //instance = this
         //Utils.hideStatusBar(activity, false)
+        NfcUtils.getInstance().init(this)
         mNfcAdapter= NfcUtils.getInstance().nfcAdapter
         NfcUtils.getInstance().setReadNdefListener(this)
 
@@ -721,6 +719,12 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
         }
     }
 
+    override fun onResume() {
+        super.onResume()
+
+        HardWareFactory.getHardTools().initNFC()
+    }
+
     override fun destory() {
         unRegReceiver()
         EventBus.getDefault().unregister(this)
@@ -1215,6 +1219,10 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
         intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
         intentFilter.addAction(Constant.KEY_CALL_UP)
         intentFilter.addAction(Constant.KEY_HOME_UP)
+        //卡尔10寸横屏
+        intentFilter.addAction(Constant.HOOK_OFF)
+        intentFilter.addAction(Constant.HOOK_ON)
+
         registerReceiver(receiver, intentFilter)
     }
 
@@ -2321,6 +2329,36 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
                 } else {
                     showMessage(R.string.wait_moment)
                 }
+            } else if (intent.action == Constant.HOOK_ON) {
+                Log.e(TAG,"手柄放下 ")
+                Constant.hookOn = true
+                VoiceManagerUtil.switchAudioMode(activity, true)
+                if (System.currentTimeMillis() - clickCallTime > 2000) {
+                    if (Constant.CALL_STATE == Constant.CALL_OUTGOING) {
+                        //呼出取消
+                        Constant.CALL_STATE = Constant.CALL_STANDBY
+                        DeviceChannel.calling = false
+                        EventBus.getDefault().post(MessageEvent("cancel", Constant.EVENT_END_CALL))
+                    } else if (Constant.CALL_STATE == Constant.CALL_CALLING) {
+                        Constant.CALL_STATE = Constant.CALL_STANDBY
+                        DeviceChannel.calling = false
+                        EventBus.getDefault().post(MessageEvent("handoff", Constant.EVENT_END_CALL))
+                    }
+                }
+
+                clickCallTime = System.currentTimeMillis()
+            } else if (intent.action == Constant.HOOK_OFF) {
+                Log.e(TAG,"手柄拿起 ")
+                Constant.hookOn = false
+                VoiceManagerUtil.switchAudioMode(activity, false)
+                if (System.currentTimeMillis() - clickCallTime > 2000) {
+                    if (Constant.CALL_STATE == Constant.CALL_STANDBY) {
+                        //不是呼出也不是通话状态则接听电话
+                        EventBus.getDefault().post(MessageEvent("hookoff", Constant.EVENT_HOOK_OFF))
+                    }
+                }
+
+                clickCallTime = System.currentTimeMillis()
             }
         }
     }

+ 6 - 0
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/SipCallFragment.kt

@@ -601,6 +601,12 @@ class SipCallFragment: BaseCallFragment() {
                 }
             }
 
+            Constant.EVENT_HOOK_OFF -> {
+                RingPlayHelper.stopRingTone()
+                voiceAccept()
+                acceptCall()
+            }
+
             Constant.SIP_CONNECTED -> {
                 sipCore!!.isMicEnabled = true
                 showCalling(true)

+ 37 - 10
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/SkyCallFragment.kt

@@ -181,6 +181,14 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
         //VoiceManagerUtil.setCallVoice(activity, SettingConfig.getExtensionCallVolume(activity))
         //WebRTCEngine.getInstance().toggleSpeaker(true)
 
+        if (Constant.hookOn) {
+            //手柄放下,免提模式
+            WebRTCEngine.getInstance().toggleSpeaker(true)
+        } else {
+            //手柄拿起,听筒模式
+            WebRTCEngine.getInstance().toggleSpeaker(false)
+        }
+
         volume = SettingConfig.getExtensionCallVolume(activity)
         if (volume < 0 || volume > 100) {
             volume = 60
@@ -520,6 +528,14 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
 
         //通话时关闭指示灯,防止热量太高导致设备重启
         SerialPortHelper.setCallStatus("0")
+
+        if (Constant.hookOn) {
+            //手柄放下,免提模式
+            WebRTCEngine.getInstance().toggleSpeaker(true)
+        } else {
+            //手柄拿起,听筒模式
+            WebRTCEngine.getInstance().toggleSpeaker(false)
+        }
     }
 
     override fun callEnd(handoff: Boolean) {
@@ -536,11 +552,9 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
             Log.e(TAG, "call end !!!!!!!!!!!!!!!!!!")
             if (handoff) {
                 if (visiting) {
-                    //VideoUtil.handoffVideoCall(Constant.DEVICE_ID, fromId, interactionVO?.id)
                     val callTcp = VideoUtil.videoHandoff(tid, Constant.DEVICE_ID, fromId, interactionVO?.id)
                     TcpClient.getInstance().sendMsg(callTcp.toJson())
                 } else {
-                    //VoiceUtil.handoffAudioCall(Constant.DEVICE_ID, fromId, interactionVO?.id)
                     val callTcp = VoiceUtil.voiceHandoff(tid, Constant.DEVICE_ID, fromId, interactionVO?.id)
                     TcpClient.getInstance().sendMsg(callTcp.toJson())
                 }
@@ -857,30 +871,43 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
                     val serialAction = messageEvent.message as String
                     if (serialAction.equals("cancel")) {
                         RingPlayHelper.stopRingTone()
-                        //Constant.CALL_STATE = Constant.CALL_STANDBY
-                        //VoiceUtil.cancelAudioCall(Constant.DEVICE_ID)
                         voiceCancel()
                         cancelCall()
                     } else if (serialAction.equals("accept")) {
                         RingPlayHelper.stopRingTone()
-                        //Constant.CALL_STATE = Constant.CALL_CALLING
-                        //VoiceUtil.acceptAudioCall(Constant.DEVICE_ID, fromId, interactionVO?.id)
                         voiceAccept()
                         acceptCall()
                         janusClient!!.connect(-1, false)
                     } else if (serialAction.equals("handoff")) {
-                        //Constant.CALL_STATE = Constant.CALL_STANDBY
-                        //VoiceUtil.handoffAudioCall(Constant.DEVICE_ID, fromId, Constant.interactionId)
                         callEnd(true)
                     } else if (serialAction.equals("reject")) {
                         RingPlayHelper.stopRingTone()
-                        //Constant.CALL_STATE = Constant.CALL_STANDBY
-                        //VoiceUtil.rejectAudioCall(Constant.DEVICE_ID, fromId, interactionVO?.id)
                         voiceReject()
                         callEnd(false)
                     }
                 }
             }
+
+            Constant.EVENT_END_CALL -> {
+                if (messageEvent.getMessage() is String) {
+                    val str = messageEvent.getMessage() as String
+                    if (str.equals("cancel")) {
+                        RingPlayHelper.stopRingTone()
+                        voiceCancel()
+                        cancelTimer()
+                        callEnd(false)
+                    } else {
+                        callEnd(true)
+                    }
+                }
+            }
+
+            Constant.EVENT_HOOK_OFF -> {
+                RingPlayHelper.stopRingTone()
+                voiceAccept()
+                acceptCall()
+                janusClient!!.connect(-1, false)
+            }
         }
     }
 

+ 1 - 0
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/hardware/HardTools.java

@@ -46,6 +46,7 @@ public  class HardTools {
     public void startbar(Boolean is){}
     public void setTime(Context context , long timeMills, String timeZone){}
 
+    public void initNFC(){}
 
     //提供卡号
     public  void offerCardData(String data){}

+ 6 - 1
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/hardware/imp/WdchHardTools.java

@@ -44,8 +44,13 @@ public class WdchHardTools extends HardTools {
     @Override
     public void init(CallingbedActivationActivity callingbedActivationActivity) {
           SerialPortUtil.getInstance().openSerialPortDCH();
-          NfcUtils.getInstance().NfcOnResume();
     }
+
+    @Override
+    public void initNFC() {
+        NfcUtils.getInstance().NfcOnResume();
+    }
+
     @Override
     public void setTime(Context context, long timeMills, String timeZone) {
         if (timeMills!=0){

+ 8 - 2
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/hardware/imp/ZXHardTools.java

@@ -4,6 +4,7 @@ import android.app.Application;
 import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.os.Build;
 import android.util.Log;
 
 import com.wdkl.app.ncs.callingbed.activity.AppUpdateActivity;
@@ -53,8 +54,13 @@ public class ZXHardTools extends HardTools {
     @Override
     public void Registration(Context context) {
         //获取mac地址
-        Constant.LOCAL_MAC = NetHelper.getInstance().getIMEI();
-        Constant.DEVICE_REGISTER_ID = Constant.LOCAL_MAC;
+        Constant.LOCAL_MAC = NetHelper.getInstance().getMacAddress();
+        Constant.DEVICE_SN = NetHelper.getInstance().getIMEI();
+        if ("YUNPAI_H6".equals(Build.MODEL) || "YUNPAI_H6B".equals(Build.MODEL)) {
+            Constant.DEVICE_REGISTER_ID = Constant.DEVICE_SN;
+        } else {
+            Constant.DEVICE_REGISTER_ID = Constant.LOCAL_MAC;
+        }
     }
 
     @Override

+ 5 - 0
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/helper/VoiceManagerUtil.java

@@ -185,4 +185,9 @@ public class VoiceManagerUtil {
         AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
         audioManager.setMode(mode);
     }
+
+    public static void switchAudioMode(Context context, boolean speakerOn) {
+        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+        audioManager.setSpeakerphoneOn(speakerOn);
+    }
 }

+ 3 - 2
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/utils/ClientManager.java

@@ -2,6 +2,7 @@ package com.wdkl.app.ncs.callingbed.utils;
 
 import com.inuker.bluetooth.library.BluetoothClient;
 import com.wdkl.app.ncs.callingbed.activity.CallingbedActivity;
+import com.wdkl.ncs.android.lib.base.BaseApplication;
 
 /**
  * Created by dingjikerbo on 2016/8/27.
@@ -9,13 +10,13 @@ import com.wdkl.app.ncs.callingbed.activity.CallingbedActivity;
 public class ClientManager {
 
     private static BluetoothClient mClient;
-    private static CallingbedActivity application = CallingbedActivity.Companion.getInstance();
+    //private static CallingbedActivity application = CallingbedActivity.Companion.getInstance();
 
     public static BluetoothClient getClient() {
         if (mClient == null) {
             synchronized (ClientManager.class) {
                 if (mClient == null) {
-                    mClient = new BluetoothClient(application);
+                    mClient = new BluetoothClient(BaseApplication.appContext);
                 }
             }
         }

+ 18 - 9
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/utils/NfcUtils.java

@@ -39,7 +39,7 @@ public class NfcUtils {
     private OnWriteToNdefListener mWriteNdefListener;
     /* NDEF 标签删除监听 */
     private OnDeleteNdefListener mDeleteNdefListener;
-    private static CallingbedActivity application = CallingbedActivity.Companion.getInstance();
+    private static CallingbedActivity mainActivity;
 
     public static NfcUtils getInstance() {
         return NfcUtilsHolder.INSTANCE;
@@ -50,12 +50,16 @@ public class NfcUtils {
     }
 
     private NfcUtils() {
-        mAdapter = NfcAdapter.getDefaultAdapter(application);
+        /*mAdapter = NfcAdapter.getDefaultAdapter(application);
         pIntent = PendingIntent.getBroadcast(application, 0,
                 //在Manifest里或者这里设置当前activity启动模式,否则每次向阳NFC事件,activity会重复创建
                 // 当然也要按照具体情况来,你设置成singleTask也不是不行,
                 new Intent("NFC_DISCOVERYED"),
-                PendingIntent.FLAG_UPDATE_CURRENT);
+                PendingIntent.FLAG_UPDATE_CURRENT);*/
+    }
+
+    public void init(CallingbedActivity activity) {
+        mainActivity = activity;
     }
 
     /**
@@ -112,13 +116,18 @@ public class NfcUtils {
      */
     public NfcAdapter getNfcAdapter() {
         if (mAdapter == null) {
-            mAdapter = NfcAdapter.getDefaultAdapter(application);
-
+            mAdapter = NfcAdapter.getDefaultAdapter(mainActivity);
+            pIntent = PendingIntent.getBroadcast(mainActivity, 0,
+                    //在Manifest里或者这里设置当前activity启动模式,否则每次向阳NFC事件,activity会重复创建
+                    // 当然也要按照具体情况来,你设置成singleTask也不是不行,
+                    new Intent("NFC_DISCOVERYED"),
+                    PendingIntent.FLAG_UPDATE_CURRENT);
         }
         return mAdapter;
     }
+
     public void NfcOnResume(){
-        if (mAdapter != null) {
+        if (mAdapter != null && mainActivity != null) {
             //添加intent-filter
             IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
             IntentFilter tag = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
@@ -138,7 +147,7 @@ public class NfcUtils {
                             "android.nfc.tech.NfcBarcode"
                     }
             };
-            mAdapter.enableForegroundDispatch(application, pIntent, filters, techList);
+            mAdapter.enableForegroundDispatch(mainActivity, pIntent, filters, techList);
         }
     }
 
@@ -365,8 +374,8 @@ public class NfcUtils {
         setReadNdefListener(null);
         setWriteNdefListener(null);
         setDeleteNdefListener(null);
-        if (mAdapter != null) {
-            mAdapter.disableForegroundDispatch(application);
+        if (mAdapter != null && mainActivity != null) {
+            mAdapter.disableForegroundDispatch(mainActivity);
         }
     }