Selaa lähdekoodia

增加测试模式:设备未注册时通过长按面板呼叫键进入测试模式

weizhengliang 2 vuotta sitten
vanhempi
commit
4cfd7f30cd

+ 50 - 5
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/activity/CallingbedActivity.kt

@@ -25,10 +25,7 @@ import com.wdkl.app.ncs.callingbed.R
 import com.wdkl.app.ncs.callingbed.adapter.NurseConfigAdpter
 import com.wdkl.app.ncs.callingbed.agreement.CallingbedAgreement
 import com.wdkl.app.ncs.callingbed.databinding.CallingbedMainLayBinding
-import com.wdkl.app.ncs.callingbed.fragment.CostFragment
-import com.wdkl.app.ncs.callingbed.fragment.MainFragment
-import com.wdkl.app.ncs.callingbed.fragment.QrCodeFragment
-import com.wdkl.app.ncs.callingbed.fragment.SkyCallFragment
+import com.wdkl.app.ncs.callingbed.fragment.*
 import com.wdkl.app.ncs.callingbed.helper.*
 import com.wdkl.app.ncs.callingbed.launch.CallingbedLaunch
 import com.wdkl.app.ncs.callingbed.settings.SettingConfig
@@ -114,6 +111,7 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
     private var netErrCount : Int = 0
     private var clickSosTime : Long = 0
     private var pressTime : Long = 0
+    private var callBtnPressTime: Long = 0
 
     private var serverSuccess = false
 
@@ -131,6 +129,8 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
     //private val callCareFragment = "call_care_fragment"
     //呼叫护士
     //private val callNurseFragment = "call_nurse_fragment"
+    //test
+    private val testFragment = "test_fragment"
 
     private val uninstallApk = false
     private var copyDone = false
@@ -207,6 +207,8 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
             }.start()
         }
 
+        SoundPoolManager.getInstance().init()
+
         checkServer()
 
         if ("rk3128".equals(Build.MODEL)) {
@@ -441,6 +443,7 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
         EventBus.getDefault().unregister(this)
         unRegReceiver()
         handler.removeCallbacksAndMessages(null)
+        SoundPoolManager.getInstance().release()
         isTimeWorking = false
     }
 
@@ -456,7 +459,7 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
             var item = NurseConfigDto()
             item.nurseConfigName = StringUtil.getResString(R.string.default_nurse_config_name)
             item.nurseOptionName = StringUtil.getResString(R.string.str_empty)
-            item.nurseColorRbg = "2F9DF1"
+            item.nurseColorRbg = ""
             configList.add(item)
         }
 
@@ -722,6 +725,13 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
         }
     }
 
+    //测试模式
+    fun startTestMode() {
+        if (!testFragment.equals(curFragment)) {
+            switchToFragment(R.id.callingbed_main_frame, TestFragment(), testFragment)
+        }
+    }
+
     //切换fragment
     private fun switchToFragment(layId: Int, fragment: Fragment, tag: String) {
         supportFragmentManager.beginTransaction()
@@ -860,6 +870,41 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
         Log.d("serialPortBedOnclick", "buffer[0]:" + buffer[0] + ", buffer[1]:" + buffer[1] + ", buffer[2]:" + buffer[2]
                 + ", buffer[3]:" + buffer[3] + ", buffer[4]:" + buffer[4] + ", buffer[5]:" + buffer[5] + ", buffer[6]:" + buffer[6]
                 + ", buffer[7]:" + buffer[7] + ", buffer[8]:" + buffer[8])
+        //测试模式
+        if (testFragment == curFragment) {
+            if (buffer[0].toInt() == 1 || buffer[0].toInt() == 2) {
+                EventBus.getDefault().post(MessageEvent("btn1", Constant.EVENT_SERIAL_TEST))
+            } else if (buffer[1].toInt() == 1 || buffer[1].toInt() == 2) {
+                EventBus.getDefault().post(MessageEvent("btn2", Constant.EVENT_SERIAL_TEST))
+            } else if (buffer[2].toInt() == 1 || buffer[2].toInt() == 2) {
+                EventBus.getDefault().post(MessageEvent("btn3", Constant.EVENT_SERIAL_TEST))
+            } else if (buffer[3].toInt() == 1 || buffer[3].toInt() == 2) {
+                EventBus.getDefault().post(MessageEvent("btn4", Constant.EVENT_SERIAL_TEST))
+            } else if (buffer[4].toInt() == 1 || buffer[4].toInt() == 2) {
+                EventBus.getDefault().post(MessageEvent("btn5", Constant.EVENT_SERIAL_TEST))
+            } else if (buffer[5].toInt() == 1 || buffer[5].toInt() == 2) {
+                EventBus.getDefault().post(MessageEvent("call1", Constant.EVENT_SERIAL_TEST))
+            } else if (buffer[6].toInt() == 1 || buffer[6].toInt() == 2) {
+                EventBus.getDefault().post(MessageEvent("call2", Constant.EVENT_SERIAL_TEST))
+            }
+            return
+        }
+
+        //若设备未注册或未启用时,面板呼叫键长按5s后进入测试模式
+        if (Constant.DEVICE_STATUS != 1) {
+            if (buffer[5].toInt() == 0) {
+                //按下
+                callBtnPressTime = System.currentTimeMillis()
+                return
+            } else if (buffer[5].toInt() == 1 || buffer[5].toInt() == 2) {
+                //松开
+                if (System.currentTimeMillis() - callBtnPressTime > 4000) {
+                    startTestMode()
+                    return
+                }
+            }
+        }
+
         //首页
         if (buffer[0].toInt() == 1 || buffer[0].toInt() == 2) {
             if (skyCallFragment == null) {

+ 7 - 1
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/adapter/NurseConfigAdpter.kt

@@ -3,6 +3,7 @@ package com.wdkl.app.ncs.callingbed.adapter
 import android.content.Context
 import android.graphics.Color
 import android.support.v7.widget.RecyclerView
+import android.text.TextUtils
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -30,7 +31,12 @@ class NurseConfigAdpter : RecyclerView.Adapter<NurseConfigAdpter.ViewHolder> {
 
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
         try {
-            holder.nurseItem.setBackgroundColor(Color.parseColor("#"+data.get(position).nurseColorRbg))
+            val color = data[position].nurseColorRbg
+            if (TextUtils.isEmpty(color)) {
+                holder.nurseItem.setBackgroundColor(Color.parseColor("#E7E7E7"))
+            } else {
+                holder.nurseItem.setBackgroundColor(Color.parseColor("#$color"))
+            }
             holder.nurseName.setText(data.get(position).nurseConfigName)
             holder.nurseValue.setText(data.get(position).nurseOptionName)
         } catch (e: Exception) {

+ 2 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/di/CallingbedComponent.kt

@@ -28,4 +28,6 @@ interface CallingbedComponent {
     fun inject(activity: CallCareFragment)
 
     fun inject(activity: CallNurseFragment)
+
+    fun inject(activity: TestFragment)
 }

+ 241 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/TestFragment.kt

@@ -0,0 +1,241 @@
+package com.wdkl.app.ncs.callingbed.fragment
+
+import android.os.Handler
+import android.os.Looper
+import com.enation.javashop.net.engine.model.NetState
+import com.wdkl.app.ncs.callingbed.R
+import com.wdkl.app.ncs.callingbed.databinding.TestFragmentLayBinding
+import com.wdkl.app.ncs.callingbed.helper.MediaPlayHelper
+import com.wdkl.app.ncs.callingbed.helper.RecordHelper
+import com.wdkl.app.ncs.callingbed.helper.SoundPoolManager
+import com.wdkl.app.ncs.callingbed.launch.CallingbedLaunch
+import com.wdkl.ncs.android.lib.base.BaseFragment
+import com.wdkl.ncs.android.lib.vo.filter
+import com.wdkl.ncs.android.middleware.common.Constant
+import com.wdkl.ncs.android.middleware.common.MessageEvent
+import com.wdkl.ncs.android.middleware.logic.contract.callingbed.QrCodeFragmentContract
+import com.wdkl.ncs.android.middleware.logic.presenter.callingbed.QrCodeFragmentPresenter
+import kotlinx.android.synthetic.main.test_fragment_lay.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
+import serialporttest.utils.SerialPortUtil
+
+class TestFragment : BaseFragment<QrCodeFragmentPresenter, TestFragmentLayBinding>(), QrCodeFragmentContract.View {
+    val TAG = "TestFragment"
+
+    var info = ""
+    var buttonTest = false
+    var testButton1 = false
+    var testButton2 = false
+    var testButton3 = false
+    var testButton4 = false
+    var testButton5 = false
+    var testButton6 = false
+    var testButton7 = false
+
+    //private var mCamera: Camera? = null
+
+    private val handler = Handler(Looper.getMainLooper())
+
+    override fun getLayId(): Int {
+        return R.layout.test_fragment_lay
+    }
+
+    override fun bindDagger() {
+        CallingbedLaunch.component.inject(this)
+    }
+
+    override fun init() {
+        RecordHelper.getInstance().init()
+        SoundPoolManager.getInstance().playSound(4, 1.0f, 1.0f, 0)
+
+        //startCameraPreview()
+
+        //2分钟后没有测试完直接退出
+        handler.postDelayed({
+            EventBus.getDefault().post(MessageEvent("BackToMain", Constant.EVENT_BACK_MAIN))
+        }, 150000)
+    }
+
+    override fun bindEvent() {
+    }
+
+    private fun startTest() {
+        Thread {
+            info += "--> 麦克风测试:\r\n"
+            showInfo(info)
+            SoundPoolManager.getInstance().playSound(3, 1.0f, 1.0f, 0)
+            Thread.sleep(2000)
+            info += "开始录音...\r\n"
+            showInfo(info)
+            RecordHelper.getInstance().recordTestStart()
+            Thread.sleep(2500)
+            RecordHelper.getInstance().recordTestStop()
+            Thread.sleep(500)
+            info += "播放录音...\r\n"
+            showInfo(info)
+            MediaPlayHelper.getInstance().playUrlMusic(RecordHelper.getInstance().audiofilePath, 1.0f, false)
+
+            Thread.sleep(3000)
+            RecordHelper.getInstance().deleteAudioFile()
+
+            info += "--> 指示灯测试\r\n"
+            showInfo(info)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "0", "000000", "F")
+            Thread.sleep(300)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "0", "999999", "F")
+            Thread.sleep(500)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "1", "000000", "F")
+            Thread.sleep(300)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "1", "999999", "F")
+            Thread.sleep(500)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "2", "000000", "F")
+            Thread.sleep(300)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "2", "999999", "F")
+            Thread.sleep(500)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "3", "000000", "F")
+            Thread.sleep(300)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "3", "999999", "F")
+            Thread.sleep(500)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "4", "000000", "F")
+            Thread.sleep(300)
+            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + "4", "999999", "F")
+            Thread.sleep(1000)
+
+            info += "测试结束,即将退出!"
+            showInfo(info)
+
+            Thread.sleep(6000)
+            EventBus.getDefault().post(MessageEvent("BackToMain", Constant.EVENT_BACK_MAIN))
+        }.start()
+    }
+
+    private fun showInfo(text: String) {
+        activity.runOnUiThread {
+            if (tv_test_info != null) {
+                tv_test_info.text = text
+            }
+        }
+    }
+
+    /*private fun startCameraPreview() {
+        val num = Camera.getNumberOfCameras()
+        if (num > 0) {
+            try {
+                mCamera = Camera.open()
+            } catch (e: Exception) {
+                tv_camera.visibility = View.VISIBLE
+                tv_camera.text = "摄像头打开失败"
+                e.printStackTrace()
+                return
+            }
+
+            camera_preview_surface.getHolder().addCallback(object : SurfaceHolder.Callback {
+                override fun surfaceCreated(holder: SurfaceHolder?) {
+
+                    try {
+                        mCamera!!.setPreviewDisplay(camera_preview_surface.getHolder())
+                        mCamera!!.startPreview()
+                    } catch (e: Exception) {
+                        e.printStackTrace()
+                    }
+                }
+
+                override fun surfaceChanged(
+                    holder: SurfaceHolder?,
+                    format: Int,
+                    width: Int,
+                    height: Int
+                ) {
+                    //
+                }
+
+                override fun surfaceDestroyed(holder: SurfaceHolder?) {
+                    //
+                }
+            })
+        } else {
+            tv_camera.visibility = View.VISIBLE
+            tv_camera.text = "没有摄像头"
+        }
+    }*/
+
+    override fun onStart() {
+        EventBus.getDefault().register(this)
+        super.onStart()
+    }
+
+    override fun onStop() {
+        EventBus.getDefault().unregister(this)
+        super.onStop()
+    }
+
+    override fun destory() {
+        /*if (mCamera != null) {
+            mCamera!!.stopPreview()
+            mCamera!!.release()
+            mCamera = null
+        }*/
+        handler.removeCallbacksAndMessages(null)
+    }
+
+    override fun onError(message: String, type: Int) {
+        //
+    }
+
+    override fun complete(message: String, type: Int) {
+    }
+
+    override fun start() {
+    }
+
+    override fun networkMonitor(state: NetState) {
+        state.filter(onWifi = {
+
+        },onMobile = {
+
+        },offline = {
+
+        })
+    }
+
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onMoonEvent(messageEvent: MessageEvent) {
+        if (Constant.EVENT_SERIAL_TEST == messageEvent.type) {
+            if (!buttonTest) {
+                val message = messageEvent.message as String
+                if (message == "call1" && !testButton1) {
+                    info += "##面板呼叫键## \r\n"
+                    testButton1 = true
+                } else if (message == "call2" && !testButton2) {
+                    info += "##手柄按键## \r\n"
+                    testButton2 = true
+                } else if (message == "btn1" && !testButton3) {
+                    info += "##面板触摸键1## \r\n"
+                    testButton3 = true
+                } else if (message == "btn2" && !testButton4) {
+                    info += "##面板触摸键2## \r\n"
+                    testButton4 = true
+                } else if (message == "btn3" && !testButton5) {
+                    info += "##面板触摸键3## \r\n"
+                    testButton5 = true
+                } else if (message == "btn4" && !testButton6) {
+                    info += "##面板触摸键4## \r\n"
+                    testButton6 = true
+                } else if (message == "btn5" && !testButton7) {
+                    info += "##面板触摸键5## \r\n"
+                    testButton7 = true
+                }
+
+                showInfo(info)
+
+                if (testButton1 && testButton2 && testButton3 && testButton4 && testButton5 && testButton6 && testButton7) {
+                    buttonTest = true
+                    startTest()
+                }
+            }
+        }
+    }
+}

+ 219 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/helper/MediaPlayHelper.java

@@ -0,0 +1,219 @@
+package com.wdkl.app.ncs.callingbed.helper;
+
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+
+import com.wdkl.ncs.android.lib.base.BaseApplication;
+
+public class MediaPlayHelper {
+
+    private static MediaPlayHelper sInstance = null;
+    private MediaPlayer mediaPlayer;
+    private HandlerThread playHandlerThread;
+    private Handler playHandler;
+
+    private int mResId;
+    private String mUrl;
+    private float mVolume;
+    private boolean mLoop;
+
+    /**
+     * 播放res资源
+     */
+    public static final int PLAY_RES = 100;
+    /**
+     * 播放url资源
+     */
+    public static final int PLAY_URL = 101;
+    /**
+     * 停止
+     */
+    public static final int STOP = 102;
+    /**
+     * 释放
+     */
+    public static final int RELEASE = 103;
+
+
+    private MediaPlayHelper() {
+        createHandlerThread();
+    }
+
+    public static MediaPlayHelper getInstance() {
+        if (sInstance == null) {
+            synchronized (MediaPlayHelper.class) {
+                if (sInstance == null) {
+                    sInstance = new MediaPlayHelper();
+                }
+            }
+        }
+        return sInstance;
+    }
+
+    private void createHandlerThread() {
+        if (playHandlerThread == null) {
+            playHandlerThread = new HandlerThread("playHandlerThread");
+            playHandlerThread.start();
+        }
+
+        if (playHandler == null) {
+            playHandler = new Handler(playHandlerThread.getLooper()) {
+                @Override
+                public void handleMessage(Message msg) {
+                    switch (msg.what) {
+                        case PLAY_RES:
+                            playResMusicNow();
+                            break;
+                        case PLAY_URL:
+                            playUrlMusicNow();
+                            break;
+                        case STOP:
+                            stopMusicNow();
+                            break;
+                        case RELEASE:
+                            releaseMediaNow();
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            };
+        }
+    }
+
+    public void playResMusic(int id, float vol, boolean loop) {
+        mResId = id;
+        mVolume = vol;
+        mLoop = loop;
+        playHandler.sendEmptyMessage(PLAY_RES);
+    }
+
+    public void playUrlMusic(String url, float vol, boolean loop) {
+        mUrl = url;
+        mVolume = vol;
+        mLoop = loop;
+        playHandler.sendEmptyMessage(PLAY_URL);
+    }
+
+    public void stopMusic() {
+        playHandler.sendEmptyMessage(STOP);
+    }
+
+    public void releaseMusic() {
+        playHandler.sendEmptyMessage(RELEASE);
+    }
+
+    //播放本地res音频资源
+    private void playResMusicNow() {
+        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
+            mediaPlayer.stop();
+        }
+        mediaPlayer = MediaPlayer.create(BaseApplication.appContext, mResId);
+        try {
+            mediaPlayer.setLooping(mLoop);
+            mediaPlayer.setVolume(mVolume, mVolume);
+            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+            mediaPlayer.start();
+            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+                @Override
+                public void onCompletion(MediaPlayer player) {
+                    //playMusicComplete();
+                    //stopMusicNow();
+                }
+            });
+            mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+                @Override
+                public boolean onError(MediaPlayer player, int what, int extra) {
+                    //playMusicError();
+                    stopMusicNow();
+                    return false;
+                }
+            });
+        } catch (Exception e) {
+            //playMusicError();
+            e.printStackTrace();
+        }
+    }
+
+    //播放远程或本地存储音频资源
+    private void playUrlMusicNow() {
+        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
+            mediaPlayer.stop();
+        }
+        mediaPlayer = new MediaPlayer();
+        try {
+            mediaPlayer.reset();
+            mediaPlayer.setDataSource(mUrl);
+            mediaPlayer.setLooping(mLoop);
+            mediaPlayer.setVolume(mVolume, mVolume);
+            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
+                @Override
+                public void onPrepared(MediaPlayer player) {
+                    if (mediaPlayer != null) {
+                        mediaPlayer.start();
+                    }
+                }
+            });
+            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+                @Override
+                public void onCompletion(MediaPlayer player) {
+                    //playMusicComplete();
+                    //stopMusicNow();
+                }
+            });
+            mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+                @Override
+                public boolean onError(MediaPlayer player, int what, int extra) {
+                    //playMusicError();
+                    stopMusicNow();
+                    return false;
+                }
+            });
+            mediaPlayer.prepareAsync();
+        } catch (Exception e) {
+            //playMusicError();
+            e.printStackTrace();
+        }
+    }
+
+    private void stopMusicNow() {
+        if (mediaPlayer != null) {
+            mediaPlayer.setOnPreparedListener(null);
+            mediaPlayer.setOnCompletionListener(null);
+            try {
+                //if (mediaPlayer.isPlaying()) {
+                    mediaPlayer.stop();
+                    mediaPlayer.release();
+                //}
+            } catch (IllegalStateException e) {
+                e.printStackTrace();
+            }
+        }
+        mediaPlayer = null;
+    }
+
+    private void releaseMediaNow() {
+        if (mediaPlayer != null) {
+            mediaPlayer.setOnPreparedListener(null);
+            mediaPlayer.setOnCompletionListener(null);
+            try {
+                mediaPlayer.stop();
+                mediaPlayer.release();
+            } catch (IllegalStateException e) {
+                e.printStackTrace();
+            }
+        }
+        mediaPlayer = null;
+    }
+
+    public boolean isMediaPlaying() {
+        if (mediaPlayer != null) {
+            return mediaPlayer.isPlaying();
+        }
+        return false;
+    }
+}

+ 126 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/helper/RecordHelper.java

@@ -0,0 +1,126 @@
+package com.wdkl.app.ncs.callingbed.helper;
+
+import android.media.MediaRecorder;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.File;
+import java.io.IOException;
+
+public class RecordHelper {
+    private static final String VOICE_MSG_FILE_PATH = Environment.getExternalStorageDirectory().getPath() + "/VoiceMsg";
+    private String audiofilePath;
+    private MediaRecorder mediaRecorder;
+    private static RecordHelper sInstance = null;
+    private boolean recording = false;
+
+    private final static Object lock = new Object();
+
+    public RecordHelper() {
+    }
+
+    public static RecordHelper getInstance() {
+        if (sInstance == null) {
+            synchronized (RecordHelper.class) {
+                if (sInstance == null) {
+                    sInstance = new RecordHelper();
+                }
+            }
+        }
+        return sInstance;
+    }
+
+    public void init() {
+        //创建音频文件路径
+        File file = new File(VOICE_MSG_FILE_PATH);
+        if (!file.exists()) {
+            file.mkdir();
+        }
+    }
+
+    public void startRecord() {
+        audiofilePath = VOICE_MSG_FILE_PATH + "/" + System.currentTimeMillis() + "_voice.mp3";
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                synchronized (lock) {
+                    try {
+                        mediaRecorder = new MediaRecorder();
+                        mediaRecorder.setOutputFile(audiofilePath);
+                        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置MediaRecorder的音频源为麦克风
+                        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 设置MediaRecorder录制的音频格式
+                        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);// 设置MediaRecorder录制音频的编码为amr
+                        mediaRecorder.prepare();
+                        mediaRecorder.start();
+                        recording = true;
+                    } catch (IOException e) {
+                        Log.i("error", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
+                    }
+                }
+            }
+        }).start();
+    }
+
+    public void stopRecord() {
+        synchronized (lock) {
+            try {
+                mediaRecorder.stop();
+                mediaRecorder.release();
+                mediaRecorder = null;
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                recording = false;
+            }
+        }
+    }
+
+    public void recordTestStart() {
+        audiofilePath = VOICE_MSG_FILE_PATH + "/" + System.currentTimeMillis() + "_voice.mp3";
+        synchronized (lock) {
+            try {
+                mediaRecorder = new MediaRecorder();
+                mediaRecorder.setOutputFile(audiofilePath);
+                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置MediaRecorder的音频源为麦克风
+                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 设置MediaRecorder录制的音频格式
+                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);// 设置MediaRecorder录制音频的编码为amr
+                mediaRecorder.prepare();
+                mediaRecorder.start();
+                recording = true;
+            } catch (IOException e) {
+                Log.i("error", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
+            }
+        }
+    }
+
+    public void recordTestStop() {
+        synchronized (lock) {
+            try {
+                mediaRecorder.stop();
+                mediaRecorder.release();
+                mediaRecorder = null;
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                recording = false;
+            }
+        }
+    }
+
+    public void deleteAudioFile(String path) {
+        synchronized (lock) {
+            File file = new File(path);
+            if (file.exists()) {
+                file.delete();
+            }
+        }
+    }
+
+    public void deleteAudioFile() {
+        deleteAudioFile(audiofilePath);
+    }
+
+    public String getAudiofilePath() {
+        return audiofilePath;
+    }
+}

+ 7 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/helper/SerialPortHelper.java

@@ -57,6 +57,11 @@ public class SerialPortHelper {
         SerialPortUtil.getInstance().sendCommand(SerialPortUtil.DOORLIGHT, command, "F");
     }
 
+    //护理灯测试
+    public static void nurseLedLightTest() {
+
+    }
+
     /**
      * 设置护理灯
      */
@@ -176,6 +181,8 @@ public class SerialPortHelper {
                             int gg = (int) ((StringUtils.parseHex2Int(StringUtils.substringByLengh(color, 2, 4))) * p);
                             int bb = (int) ((StringUtils.parseHex2Int(StringUtils.substringByLengh(color, 4, 6))) * p);
                             SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + i, beComeDoubleStr(rr) + beComeDoubleStr(gg) + beComeDoubleStr(bb), "F");
+                        } else {
+                            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.NURSELIGHT + i, "000000", "F");
                         }
                         Thread.sleep(300);
                     }

+ 83 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/helper/SoundPoolManager.java

@@ -0,0 +1,83 @@
+package com.wdkl.app.ncs.callingbed.helper;
+
+import android.media.AudioAttributes;
+import android.media.AudioManager;
+import android.media.SoundPool;
+import android.os.Build;
+
+import com.wdkl.app.ncs.callingbed.R;
+import com.wdkl.ncs.android.lib.base.BaseApplication;
+
+import java.util.HashMap;
+
+public class SoundPoolManager {
+
+    private static SoundPoolManager instance;
+    private SoundPool soundPool;
+    private HashMap<Integer, Integer> soundID = new HashMap<>();
+    private boolean isLoaded = false;
+    private boolean inited = false;
+
+    public static SoundPoolManager getInstance() {
+        if (instance == null) {
+            instance = new SoundPoolManager();
+        }
+        return instance;
+    }
+
+    public void init() {
+        if (inited) {
+            return;
+        }
+
+        if(Build.VERSION.SDK_INT > 21){
+            SoundPool.Builder builder = new SoundPool.Builder();
+            //传入音频数量
+            builder.setMaxStreams(4);
+            //AudioAttributes是一个封装音频各种属性的方法
+            AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
+            //设置音频流的合适的属性
+            attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);//STREAM_MUSIC
+            //加载一个AudioAttributes
+            builder.setAudioAttributes(attrBuilder.build());
+            soundPool = builder.build();
+        }else{
+            soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
+        }
+
+        //来电
+        soundID.put(1, soundPool.load(BaseApplication.appContext, R.raw.incoming_call, 1));
+        //去电
+        soundID.put(2, soundPool.load(BaseApplication.appContext, R.raw.outgoing_call, 1));
+        //测试
+        soundID.put(3, soundPool.load(BaseApplication.appContext, R.raw.mic_test, 1));
+        soundID.put(4, soundPool.load(BaseApplication.appContext, R.raw.test_start, 1));
+        soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
+            @Override
+            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
+                isLoaded = true;
+                inited = true;
+            }
+        });
+    }
+
+    public int playSound(int index, float leftVol, float rightVol, int loop) {
+        try {
+            if (isLoaded) {
+                return soundPool.play(soundID.get(index), leftVol, rightVol, 1, loop, 1);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return -1;
+    }
+
+    public void stopPlaySound(int streamId) {
+        soundPool.stop(streamId);
+    }
+
+    public void release() {
+        soundPool.release();
+    }
+}

+ 1 - 1
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/settings/SettingConfig.java

@@ -68,7 +68,7 @@ public class SettingConfig {
     private static final String KEY_LANGUAGE_ID = "KEY_LANGUAGE_ID";
 
     public static int getLanguageId(Context context) {
-        return getSP(context).getInt(KEY_LANGUAGE_ID, 0);
+        return getSP(context).getInt(KEY_LANGUAGE_ID, 2);
     }
 
     public static void setLanguageId(Context context, int id) {

+ 39 - 0
callingbed/src/main/res/layout/test_fragment_lay.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:padding="10dp">
+
+    <!--<SurfaceView
+        android:id="@+id/camera_preview_surface"
+        android:layout_width="160dp"
+        android:layout_height="160dp" />
+
+    <TextView
+        android:id="@+id/tv_camera"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:textSize="20sp"
+        android:visibility="gone"/>-->
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:textSize="28sp"
+        android:text="请按任意按键开始测试"
+        android:textColor="@color/red_color"/>
+
+    <TextView
+        android:id="@+id/tv_test_info"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:textSize="24sp"/>
+
+</LinearLayout>
+</layout>

BIN
callingbed/src/main/res/raw/mic_test.mp3


BIN
callingbed/src/main/res/raw/test_start.mp3


+ 2 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constant.java

@@ -183,4 +183,6 @@ public class Constant {
     public static final int EVENT_CALL_MSG = 0x11;
 
     public static final int EVENT_RESTART_APP = 0x12;
+
+    public static final int EVENT_SERIAL_TEST = 0x13;
 }