Jelajahi Sumber

<优化广播,无网络时重启设备>

weizhengliang 4 tahun lalu
induk
melakukan
7b7822e386

+ 2 - 0
app/src/main/java/com/wdkl/callingbed/common/Constants.java

@@ -284,4 +284,6 @@ public class Constants {
      * 单片机版本号  add by waderson 20190708
      */
     public static String MCU_VERSION_NUMBER = "";
+
+    public static String REBOOT_COUNT = "RebootCount";
 }

+ 27 - 2
app/src/main/java/com/wdkl/callingbed/ui/CallingBedActivity.java

@@ -177,6 +177,7 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
      */
     public static final String REGISTERCOM = "register_com";
 
+    private static boolean netOff = false;
     /**
      * 注册检测wifi强度广播
      */
@@ -425,6 +426,7 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
     private final int MAIN_DATA_ERROR = 2004;
     private final int UPDATE_BROADCAST = 2005;
     private final int NEW_INCOMING_CALL = 2006;
+    private final int RESET_ETHE = 2009;
     private MyHandler handler = new MyHandler(this);
 
     class MyHandler extends Handler {
@@ -488,6 +490,12 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
                     case NEW_INCOMING_CALL:
                         //newCalling();
                         break;
+                    case RESET_ETHE:
+                        if (netOff) {
+                            ToastUtil.showToast("网络异常,设备即将重启!!!");
+                            CallingBedSendCommand.setNetStatus(serialPortUtil, "1");
+                        }
+                        break;
                 }
             } else {
                 // 没有实例不进行操作
@@ -658,7 +666,11 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
         getSystemSettingData();
         getNoticeData();
         setTrustIcon();
-        getBroadcastAudioFiles();
+        if (isDownloadMp3) {
+            ToastUtil.showToast("广播文件正在下载中,请稍等...");
+        } else {
+            getBroadcastAudioFiles();
+        }
         /**
          * 由于机器性能方面的差异有些机子的串口反应速度比较慢;急速初始化将失效!
          * */
@@ -731,14 +743,18 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
             public void run() {
                 switch (state) {
                     case REGISTERING:
+                        netOff = false;
                         tvSipStatePoint.setBackgroundResource(R.color.yellow_color);
                         //CallingBedSendCommand.setSipStatus(serialPortUtil, "1");
                         break;
                     case REGISTERFAIL:
+                        netOff = true;
                         tvSipStatePoint.setBackgroundResource(R.color.red_color);
+                        handler.sendEmptyMessageDelayed(RESET_ETHE, 120000);
                         //CallingBedSendCommand.setSipStatus(serialPortUtil, "0");
                         break;
                     case REGISTERCOM:
+                        netOff = false;
                         tvSipStatePoint.setBackgroundResource(R.color.green);
                         //CallingBedSendCommand.setSipStatus(serialPortUtil, "2");
                         //if (!state_bk.equals(REGISTERCOM)) {
@@ -1728,7 +1744,11 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
                         long curTime = System.currentTimeMillis();
                         if (curTime - updateAudioTime > 10000) {
                             updateAudioTime = curTime;
-                            getBroadcastAudioFiles();
+                            if (isDownloadMp3) {
+                                ToastUtil.showToast("广播文件正在下载中,请稍等...");
+                            } else {
+                                getBroadcastAudioFiles();
+                            }
                         }
                         break;
                     case "broadcast_1":
@@ -2565,6 +2585,7 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
 
     //广播的实体
     private ArrayList<AllBroadcastEntity> allBroadcastList = new ArrayList<>();
+    private boolean isDownloadMp3 = false;
 
     //下载广播音频文件
     private void getBroadcastAudioFiles() {
@@ -2649,6 +2670,7 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
     private void checkAndDownloadMP3(final int index) {
         LogUtil.d("broadcast", "checkAndDownloadMP3 start..." + index);
         if (allBroadcastList != null && allBroadcastList.size() > 0 && index < allBroadcastList.size()) {
+            isDownloadMp3 = true;
             AllBroadcastEntity entity = allBroadcastList.get(index);
             String filePath = entity.getFileName();
             DownloadUtil2.getInstance().download(Constants.URL + Constants.URL_END + "/" + filePath,
@@ -2670,6 +2692,9 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
                             checkAndDownloadMP3(index+1);
                         }
                     });
+        } else {
+            //下载完成
+            isDownloadMp3 = false;
         }
     }
 

+ 28 - 4
app/src/main/java/com/wdkl/callingbed/ui/InitActivity.java

@@ -12,6 +12,7 @@ import android.net.NetworkInfo;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.Message;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
@@ -31,6 +32,7 @@ import com.wdkl.callingbed.util.DownloadUtil;
 import com.wdkl.callingbed.util.LogUtil;
 import com.wdkl.callingbed.util.NetUtil;
 import com.wdkl.callingbed.util.ScreenManagerUtil;
+import com.wdkl.callingbed.util.SharedPreferencesUtil;
 import com.wdkl.callingbed.util.StringUtils;
 import com.wdkl.callingbed.util.ToastUtil;
 import com.wdkl.callingbed.util.UdpSendUtil;
@@ -78,7 +80,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
     String macAddress = "";
 
     SerialPortUtil serialPortUtil;
-    private int countsReboot;//重启计数
+    private static int countsReboot;//重启计数
 
     @Override
     public int getLayoutId() {
@@ -186,6 +188,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
                 ToastUtil.showToast("无网络连接;以太网是否连接正常?");//网络信息初始化错误
                 //autoReboot();//wuyq remove
 
+                resetEthernet();
             }
         } else {
             updateHandler.sendEmptyMessageDelayed(404, DATEREFRESH_DELAYMILLIS);
@@ -198,9 +201,9 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
     /**
      * =================================================(网络不通)15次以上自动重启系统=====================================================
      */
-    private void autoReboot() {
-        if (countsReboot == 16) {
-            AutoRebootUtil.calculate(this);
+    private void resetEthernet() {
+        if (countsReboot == 15) {
+            updateHandler.sendEmptyMessage(222);
             countsReboot = 0;
         }
         countsReboot++;
@@ -262,6 +265,10 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
     private void getInitData() {
         LogUtil.d("getInitData", "URL==" + Constants.URL + Constants.URL_END + Constants.CALLINGBED_INIT);
         final String ipStr = NetUtil.getLocalIP();
+        //网络恢复正常,重置重启计数
+        if (!TextUtils.isEmpty(ipStr)) {
+            SharedPreferencesUtil.putIntSp(context, Constants.REBOOT_COUNT, Constants.REBOOT_COUNT, 0);
+        }
         if (Constants.URL.length() > 7) {
             OkHttpUtils
                     .post()
@@ -584,6 +591,23 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
                         stopRecord();
                     }
                     break;
+                case 222:
+                    int count = SharedPreferencesUtil.getIntSp(context, Constants.REBOOT_COUNT, Constants.REBOOT_COUNT);
+                    LogUtil.d("wzlll", "NetReset reboot count: " + count);
+                    if (count >= 10) {
+                        ToastUtil.showToast("设备出现异常,请确保网络连接正常或重启设备");
+                    } else {
+                        count++;
+                        SharedPreferencesUtil.putIntSp(context, Constants.REBOOT_COUNT, Constants.REBOOT_COUNT, count);
+                        ToastUtil.showToast("网络异常,即将重启");
+                        updateHandler.sendEmptyMessageDelayed(333, 5000);
+                    }
+                    break;
+                case 333:
+                    LogUtil.d("wzlll", "NetReset reboot...");
+                    AutoRebootUtil.reboot(MyApplication.getAppContext());
+                    CallingBedSendCommand.setNetStatus(serialPortUtil, "1");
+                    break;
             }
         }
     };

+ 11 - 0
app/src/main/java/com/wdkl/callingbed/util/SharedPreferencesUtil.java

@@ -36,6 +36,17 @@ public class SharedPreferencesUtil {
         sp.edit().putString(vname, vdata).commit();
     }
 
+    public static int getIntSp(Context context, String spname, String vname) {
+        SharedPreferences sp = context.getSharedPreferences(spname, Context.MODE_PRIVATE);
+        int value = sp.getInt(vname, 0);
+        return value;
+    }
+
+    public static void putIntSp(Context context, String spname, String vname, int vdata) {
+        SharedPreferences sp = context.getSharedPreferences(spname, Context.MODE_PRIVATE);
+        sp.edit().putInt(vname, vdata).commit();
+    }
+
     /**
      * SharedPreferences数据的清除
      *

+ 8 - 0
app/src/main/java/com/wdkl/callingbed/util/sendcommand/CallingBedSendCommand.java

@@ -118,6 +118,14 @@ public class CallingBedSendCommand {
         return false;
     }
 
+    /*
+     * 重置网络
+     * data: 0 -- 断电,  1 -- 上电
+     */
+    public static void setNetStatus(SerialPortUtil serialPortUtil, String data) {
+        serialPortUtil.sendCommand(SerialPortUtil.NET_STATUS , data, "F");
+    }
+
     /**
      * 设置当前 SIP 协议状态
      * 0:注册失败

+ 4 - 0
bedlib/src/main/java/serialporttest/utils/SerialPortUtil.java

@@ -420,6 +420,10 @@ public class SerialPortUtil {
      */
     public static final String SIP_STATUS = "SIP";
     /**
+     * 网络状态<br>
+     */
+    public static final String NET_STATUS = "NETRESET";
+    /**
      * 心跳控制<br>
      * 若MCU在10秒内没有收到信号,将自动重启Android.  随机数为“W”时将关闭心跳<br>
      * $ HEART ,1 E #  <br>