completed shutdown report.
authorTrillGates <williamtrillgates@gmail.com>
Wed, 4 Aug 2021 07:31:37 +0000 (15:31 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Wed, 4 Aug 2021 07:31:37 +0000 (15:31 +0800)
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/service/WeTalkMsgObserver.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_s123.java

index 5ec9daf..ce116ef 100644 (file)
@@ -37,6 +37,7 @@ import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.heartRateStatus;
 import com.enqualcomm.support.provider.ICContentProvider;
 import com.enqualcomm.support.provider.ICDatabaseHelper;
+import com.enqualcomm.support.provider.ShootTextProvider;
 import com.enqualcomm.support.provider.WarningItemProvider;
 import com.enqualcomm.support.provider.WeTalkMessageProvider;
 import com.enqualcomm.support.service.AntiMonitorService;
@@ -46,6 +47,7 @@ import com.enqualcomm.support.service.HeartRateManager;
 import com.enqualcomm.support.service.KeepAlive;
 import com.enqualcomm.support.service.PhoneCallListener;
 import com.enqualcomm.support.service.SendChatMessage;
+import com.enqualcomm.support.service.ShutdownFlagObserver;
 import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.service.WeTalkMsgObserver;
 import com.enqualcomm.support.service.base.AbstractConnectionService;
@@ -997,6 +999,11 @@ public class CoreService extends Service {
         resolver.registerContentObserver(
                 Uri.parse(WeTalkMessageProvider.MESSAGES_SEND), true, weTalkMsgObserver
         );
+
+        ShutdownFlagObserver shutdownFlagObserver = new ShutdownFlagObserver(mHandler, resolver);
+        resolver.registerContentObserver(Uri.parse(ShootTextProvider.SHOOT_TEXT), true,
+                shutdownFlagObserver);
+
         //启动结束设置标志位,让心率和体温检测可以正常执行。
         server_starting = false;
 
diff --git a/app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java b/app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java
new file mode 100644 (file)
index 0000000..506dca0
--- /dev/null
@@ -0,0 +1,45 @@
+package com.enqualcomm.support.service;
+
+import android.content.ContentResolver;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Handler;
+
+import com.enqualcomm.support.provider.ICDatabaseHelper;
+import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
+import com.ic.protocols.protocolAPIHelper;
+
+public class ShutdownFlagObserver extends ContentObserver {
+
+    private final Handler mHandler;
+    private final ContentResolver mResolver;
+
+    public ShutdownFlagObserver(Handler handler, ContentResolver resolver) {
+        super(handler);
+        this.mHandler = handler;
+        this.mResolver = resolver;
+    }
+
+    @Override
+    public void onChange(boolean selfChange) {
+        //改变以后,查询数据,如果是true的话,就去发送数据
+        mHandler.post(() -> {
+            Cursor query = mResolver.query(Uri.parse(ICGlobalSettingsProvider.SETTINGS),
+                    new String[]{ICDatabaseHelper.sValue},
+                    ICDatabaseHelper.sKey + "=?",
+                    new String[]{"shutdown_flag"},
+                    null);
+
+            if (query != null) {
+                if (query.moveToNext()) {
+                    String isShutDown = query.getString(0);
+                    if ("true".equals(isShutDown)) {
+                        protocolAPIHelper.sendShutdownMsg();
+                    }
+                }
+                query.close();
+            }
+        });
+    }
+}
index a746a78..7e4c678 100644 (file)
@@ -47,7 +47,6 @@ public class WeTalkMsgObserver extends ContentObserver {
                 //todo:还有类型也要查询出来
                 int type = query.getInt(query.getColumnIndex("type"));
                 query.close();
-
                 if (type == ICDatabaseHelper.MessageType.VOICE) {
                     protocolAPIHelper.sendVoice(duration, remoteNum, content, lastPathSegment);
                 } else if (type == ICDatabaseHelper.MessageType.PIC) {
index 0c7e5ea..4d11882 100644 (file)
@@ -97,6 +97,28 @@ public class protocolAPIHelper {
         }
     }
 
+    public static void sendShutdownMsg() {
+        switch (Config.protocol_no) {
+            case Config.PROTOCOL_JIAI:
+                break;
+            case Config.PROTOCOL_BEEHOME:
+                break;
+            case Config.PROTOCOL_IC:
+                break;
+            case Config.PROTOCOL_FZD:
+                break;
+            case Config.PROTOCOL_MQTT:
+                break;
+            case PROTOCOL_ANAN:
+                break;
+            case Config.PROTOCOL_S123:
+                protocols123_handler.sendShutDownMsg();
+                break;
+            case Config.PROTOCOL_GATOR:
+                break;
+        }
+    }
+
     /*
        返回true 表示 cmd 全部解析成功
        返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用
index ac8dd34..77a88ed 100644 (file)
@@ -209,6 +209,7 @@ public class protocol_s123 {
         BPMK,//关闭麦克风
         APMK,//关闭麦克风
         APGJ,//关机前的确定
+        BPGJ,//关机前的确定
         APFX,//飞行模式开关
         BP75,//闹钟,
         BPPH,//拨号功能开关
@@ -377,6 +378,31 @@ public class protocol_s123 {
         mRuntime = runtime;
     }
 
+    public void sendShutDownMsg() {
+        if (mConnection != null) {
+            mConnection.send(APGJ(mRuntime));
+        }
+    }
+
+    /**
+     * 关机前确认
+     *
+     * @return
+     */
+    public StringMessage APGJ(Runtime runtime) {
+        //IW:标识符
+        //APGJ:命令字
+        //353456789012345: 设备IMEI号,固定15位
+        //#:结束符
+        //IWAPGJ,353456789012345#
+        //说明:用于表示终端要关机了,收到回复后即可关机。
+        return genStringMessage(cmdMap.get(CMD_TYPE.APGJ),
+                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APGJ))
+                        .append(runtime.IMEI())
+                        .append(CMDSPLIT)
+                        .append(CMDEND).toString());
+    }
+
     public static String getPhoneStatus(Runtime mRuntime) {
         TelephonyManager tm = (TelephonyManager) mRuntime
                 .getContextProxy().context.getSystemService(Context.TELEPHONY_SERVICE);
@@ -3502,6 +3528,11 @@ public class protocol_s123 {
                 ICLogger.d("收到服务器设置快捷短语的指令.");
                 handleBPSM(cmd);
                 break;
+            case BPGJ:
+                ICLogger.d("服务器收到关机指令");
+                //去关机
+                handleBPGJ();
+                break;
             case APTM:
                 break;
             case APCH:
@@ -3623,6 +3654,20 @@ public class protocol_s123 {
         return ret;
     }
 
+    private void handleBPGJ() {
+        //修改数据库里的关机值
+        ContentResolver resolver = mRuntime.getContextProxy().getResolver();
+        ContentValues values = new ContentValues();
+        values.put(ICDatabaseHelper.sKey, "shutdown_flag");
+        values.put(ICDatabaseHelper.sValue, "false");
+        resolver.insert(Uri.parse(ICGlobalSettingsProvider.SETTINGS), values);
+        //执行关机操作
+        Intent intent = new Intent();
+        intent.setAction("com.ic.system.SHUTDOWN_CMD");
+        mRuntime.getContextProxy().context.sendBroadcast(intent);
+    }
+
+
     /**
      * IWBPSM,353456789012345,080835,1,2,4f60597dff0c8fd991cc6b635e383002@5f0059cb4e0a8bfe3002#
      * 快捷指令语设置