release V692
authorsnickersun <scy@incartech.cn>
Wed, 11 Nov 2020 15:42:23 +0000 (23:42 +0800)
committersnickersun <scy@incartech.cn>
Wed, 11 Nov 2020 15:42:23 +0000 (23:42 +0800)
1、protocol_ic A9项目 添加 BP65设置音量 BP47设置震动时间,添加文字已读和未读报警。
2、修改消息提示窗口,可以支持滑动显示更多文字。
3、启动时设置心率和体温时钟跳过检测。
4、部分非法退出把网络设置为未连接,尽量减少协议死掉后造成的状态显示错误。
5、Deliver 发送重试机制修改为 保证有数据时每5秒发送一次,超过5次没有响应,就等下一个心跳再开始重试。

16 files changed:
app/release/ICSer_V692_2011112333_release.apk [moved from app/release/ICSer_V689_2011061556_release.apk with 78% similarity]
app/release/output.json
app/src/main/java/com/enqualcomm/support/Config.java
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/CrashHandler.java
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java
app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java
app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java
app/src/main/java/com/enqualcomm/support/utils/Util.java
app/src/main/java/com/enqualcomm/support/utils/VibrateUtil.java
app/src/main/java/com/ic/protocols/protocol_ic.java
app/src/main/res/layout/dialog_normal_layout.xml
app/version_code.properties

similarity index 78%
rename from app/release/ICSer_V689_2011061556_release.apk
rename to app/release/ICSer_V692_2011112333_release.apk
index f93e814..5975996 100644 (file)
Binary files a/app/release/ICSer_V689_2011061556_release.apk and b/app/release/ICSer_V692_2011112333_release.apk differ
index a9c2eef..e794536 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":689,"versionName":"2011061556","enabled":true,"outputFile":"ICSer_V689_2011061556_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V689_2011061556_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":692,"versionName":"2011112333","enabled":true,"outputFile":"ICSer_V692_2011112333_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V692_2011112333_release.apk","properties":{}}]
\ No newline at end of file
index 7b7e722..55afbbc 100644 (file)
@@ -6,10 +6,12 @@ import android.text.TextUtils;
 \r
 import com.enqualcomm.support.bean.ICLocation;\r
 import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.utils.ICAudioManager;\r
 import com.enqualcomm.support.utils.ICLogger;\r
 import com.enqualcomm.support.utils.SharPreferenceUtil;\r
 import com.enqualcomm.support.utils.TimeUtil;\r
 import com.enqualcomm.support.utils.Util;\r
+import com.enqualcomm.support.utils.VibrateUtil;\r
 import com.ic.jni.ICJniUtils;\r
 import com.ic.protocols.protocolAPIHelper;\r
 \r
@@ -31,6 +33,11 @@ public class Config {
   public static boolean forceMoveCheck=true;\r
   public static boolean forceWearCheck=true;\r
 \r
+  private static int DurationOfVibration = 10;\r
+  private static int MasterVolume = 10;\r
+\r
+  private static final String KEYDurationOfVibration = "DurationVib";\r
+  private static final String KeyMasterVolume = "MasterVolume";\r
 \r
   public static final String DefaultLogFtpServer="icfota.snicker.com.cn";\r
   public static final String DefaultLogFtpUser="ftpuser";\r
@@ -47,19 +54,34 @@ public class Config {
   public static String c43_branch_name="none";\r
   public static String custom_name="none";\r
 \r
+  //配置是否广播提示框信息给外部应用显示\r
+  public static boolean noBroadCastSMSNotify=false;\r
+  public static boolean noBroadCastPushTxtNotify=false;\r
+\r
+\r
+  //protocol内部Dialog配置,true表示用外部提示窗,false表示用协议内部提示窗\r
   public static boolean noSMSNotifyDialog=false;\r
   public static boolean noPushTxtNotifyDialog=false;\r
   public static boolean noVoiceNotifyDialog=false;\r
+\r
+  //是否SOS拨号的开关,false表示只发送系统sosalarm,不发起SOS拨号\r
   public static boolean SOSNoNeedDial=false;\r
 \r
+  //ic68只有体温没有腕温,它开启代表原来的腕温函数取出的就是体温,不需要再进行换算了。\r
   public static boolean disableWristTemp=false;\r
+  //配置是否有温度传感器\r
   public static boolean noTempSensor=false;\r
+  //配置是否有心率传感器\r
   public static boolean noPPGSensor=false;\r
+  //配置脱腕报警是否需要弹出脱腕提示\r
   public static boolean needBroadcastAntiAlarm=true;\r
+  //定位是否使用wifi的配置。\r
   public static boolean disableWiFiScan=false;\r
+\r
   public static int BLEScanProtocol=0; /** 0 代表扫描beacon后 自行判断是否在指定区域,需要协议绑定beacon地址。\r
                                         *  1  代表扫描beacon后,直接把扫描结果上报即可。\r
-                                       **/\r
+                                        **/\r
+\r
   public static boolean UsePolingCheckWeared=false;\r
 \r
   static  {\r
@@ -141,6 +163,27 @@ public class Config {
   final static String KeyPolingCycleCheckAnti="PolingCycleCheckAnti";\r
   final static String KeyBleScanCycle="BleScanCycle";\r
 \r
+\r
+  final static String KeyLastUnReadMessage="UnreadMsg";\r
+\r
+\r
+  public static void setDurationOfVibration(Context context, int cycle){\r
+    SharPreferenceUtil.setPrefInt(context,KEYDurationOfVibration,cycle);\r
+  }\r
+\r
+  public static int getDurationOfVibration(Context context){\r
+    return SharPreferenceUtil.getPrefInt(context,KEYDurationOfVibration,1000);\r
+  }\r
+\r
+  public static void setMasterVolume(Context context, int cycle){\r
+    SharPreferenceUtil.setPrefInt(context,KeyMasterVolume,cycle);\r
+  }\r
+\r
+  public static int getMasterVolume(Context context){\r
+    return SharPreferenceUtil.getPrefInt(context,KeyMasterVolume,0);\r
+  }\r
+\r
+\r
   public static void setCheckAntiPolingCycle(Context context, int cycle){\r
     SharPreferenceUtil.setPrefInt(context,KeyPolingCycleCheckAnti,cycle);\r
   }\r
@@ -157,6 +200,14 @@ public class Config {
     return SharPreferenceUtil.getPrefInt(context,KeyBleScanCycle,0);\r
   }\r
 \r
+  public static String getLastUnReadMessage(Context context){\r
+    return SharPreferenceUtil.getPrefString(context,KeyLastUnReadMessage,"");\r
+  }\r
+\r
+  public static void setLastUnReadMessage(Context context,String smsPWD){\r
+    SharPreferenceUtil.setPrefString(context,KeyLastUnReadMessage,smsPWD);\r
+  }\r
+\r
   public static String getSMSPwd(Context context){\r
     return SharPreferenceUtil.getPrefString(context,KeySMSPassword,DefaultSMSPassword);\r
   }\r
@@ -244,12 +295,19 @@ public class Config {
  // }\r
 \r
   public static void loadModCycleSettings(Runtime runtime){\r
+    Context context=runtime.getContextProxy().context;\r
     ICLogger.i("current Cycles PPG "+ runtime.getPpgTestCycle()+" , LocationCycle "+runtime.getLocationInstance().getLocation_cycle()+" LocationMode "+runtime.getLocationInstance().getWorkingMod());\r
-    runtime.setPpgTestCycle(Config.getPPGTestCycle(runtime.getContextProxy().context));\r
-    runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));\r
-    runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));\r
+    runtime.setPpgTestCycle(Config.getPPGTestCycle(context));\r
+    runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(context));\r
+    runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(context));\r
     ICLogger.i("current Cycles PPG "+ runtime.getPpgTestCycle()+" , LocationCycle "+runtime.getLocationInstance().getLocation_cycle()+" LocationMode "+runtime.getLocationInstance().getWorkingMod());\r
 \r
+    int mastervolume = getMasterVolume(context);\r
+    ICAudioManager.setMasterVolumn(context,mastervolume);\r
+\r
+    int duration= getDurationOfVibration(context);\r
+    VibrateUtil.setVibPattern(duration*1000);\r
+\r
   }\r
 \r
   public static void loadHearBeatSetting(Runtime runtime){\r
@@ -462,9 +520,11 @@ public class Config {
       noTempSensor=false;\r
       L004_BroadCastActionStrip=true;\r
     }else if (custom_name.equals("YQ") ||custom_name.equals("YQ_EN")  ) { //A9-YQ\r
-      noPushTxtNotifyDialog=true;\r
+      noPushTxtNotifyDialog=false;\r
       noSMSNotifyDialog=true;\r
       noVoiceNotifyDialog=true;\r
+      noBroadCastPushTxtNotify=true;\r
+      noBroadCastSMSNotify=true;\r
       needBroadcastAntiAlarm=true;\r
       needAllwaysAlarmCutOff=true;\r
       needAllwaysAlarmFenceOut=true;\r
index 6763ff4..45e0aa7 100644 (file)
@@ -597,13 +597,22 @@ public class CoreService extends Service {
     public Connection getConnection(){\r
         return connection;\r
     }\r
-\r
+    private static boolean server_starting=true;\r
     @Override\r
     public void onCreate() {\r
 \r
+        server_starting=true;\r
         log("初始化网络协议服务");\r
         mProtocolServer=this;\r
-\r
+        java.lang.Runtime.getRuntime().addShutdownHook(new Thread(){\r
+            @Override\r
+            public void run() {\r
+                super.run();\r
+                //设置断网状态\r
+                ICLogger.i("shutdown !");\r
+                Util.setSystemProperties("persist.sys.server_connected","false");\r
+            }\r
+        });\r
         this.runtime = new Runtime();\r
         this.runtime.setFileDir(getFilesDir());\r
         this.runtime.setCacheDir(getExternalCacheDir());\r
@@ -671,6 +680,9 @@ public class CoreService extends Service {
             Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH,true);\r
             Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true);\r
             Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true);\r
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_UNREADMSG,true);\r
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_MSGREAD,true);\r
+\r
             if (Config.getConfigInitFlag(this) == 0) {\r
                 Config.setLocationMode(this, NORMAL_MOD);\r
                 Config.setLocationCycle(this, 15*60);\r
@@ -920,7 +932,7 @@ public class CoreService extends Service {
         //初始化佩戴检测\r
         runtime.anti_test_cycle=Config.getCheckAntiPolingCycle(this);\r
         if( runtime.anti_test_cycle>0){\r
-            setAntiAlarm();\r
+         //   setAntiAlarm();\r
         }\r
 \r
         //初始化蓝牙检测\r
@@ -942,6 +954,11 @@ public class CoreService extends Service {
  //更新IMEI\r
         DeviceInfoUtil.updateImei(runtime);\r
 \r
+        //设置断网状态\r
+        Util.setSystemProperties("persist.sys.server_connected","false");\r
+\r
+        //启动结束设置标志位,让心率和体温检测可以正常执行。\r
+        server_starting=false;\r
         ReConnectToServer();\r
     }\r
 \r
@@ -951,13 +968,25 @@ public class CoreService extends Service {
         runtime.getDbHelper().deleteSleepData();\r
     }\r
 \r
+    //检查是否有未读消息需要提醒\r
+    private  void checkUnreadMessage(){\r
+\r
+        String msg=Config.getLastUnReadMessage(this);\r
+        Util.checkMesageNeedNotifi(msg,runtime);\r
+\r
+\r
+    }\r
+\r
+    //内部广播StringMessage\r
     public static void DevliverStringMessage(String cmd){\r
         CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,"");\r
     }\r
+    //内部广播StringMessage\r
     public static void DevliverStringMessage(String cmd,String str){\r
         CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,str);\r
     }\r
 \r
+    //表带剪断检测报警,此处只是设备本地提醒,并不发送报警信息给服务器。\r
     public void checkAlarmMessage(){\r
 \r
 \r
@@ -979,6 +1008,8 @@ public class CoreService extends Service {
         }\r
 \r
     }\r
+\r
+    //检测久坐提醒\r
     public void checkKeepSitting(){\r
         String dateyyyyMMDDhhmmss=TimeUtil.getSystemTime3();\r
         //为了更新 isInSleepRange, 下面的语句必须执行\r
@@ -1208,11 +1239,13 @@ public class CoreService extends Service {
                 updateSleepDate(); //检查睡眠\r
                 checkKeepSitting();//检查久坐\r
                 checkAlarmMessage();//检测是否有报警消息需要显示\r
+                checkUnreadMessage();//检查未读消息\r
                 if (this.mKeepAlive != null) {\r
                     if (connection.isServerConnected() && runtime.isServerProtocolConnected()) {\r
                         this.mKeepAlive.onHeartAlarm(this.connection, this.runtime);\r
                         ICLogger.i("triggerBLEProcess ");\r
                         locationClient.triggerBLEProcess();//每次心跳检测一次BLE\r
+                        Deliver.triggerSendThread();\r
                     } else {\r
                        // if (this.mKeepAlive.is_retry_time_above_limit()) {\r
                             ICLogger.i("check 发送心跳包时,如果发现服务器没有响应,或者socket连接,则重新尝试连接服务器!");\r
@@ -1296,7 +1329,8 @@ public class CoreService extends Service {
                 ICLogger.i("自由锻炼中,跳过原有的循环心率检测!");\r
             } else {\r
                 sb.append("setHeartRateDetectAlarm " + heartRateDetectAlarmCycle);\r
-                HeartRateManager.triggerPPGtest();\r
+                if(!server_starting)\r
+                    HeartRateManager.triggerPPGtest();\r
             }\r
         }\r
         if (Config.LOG_TOFILE)ICLogger.logToFile("alarmCycle",sb.toString());\r
@@ -1416,7 +1450,8 @@ public class CoreService extends Service {
             if (Runtime.practising == true) {\r
                 ICLogger.i("自由锻炼中,跳过原有的循环温度检测!");\r
             } else {\r
-                TemperatureUtil.doTempTestInThread();\r
+                if(!server_starting)\r
+                    TemperatureUtil.doTempTestInThread();\r
             }\r
         }\r
 \r
@@ -1591,4 +1626,5 @@ public class CoreService extends Service {
         this.connection.close();\r
     }\r
 \r
+\r
 }\r
index bc5536a..7b76c21 100644 (file)
@@ -118,6 +118,8 @@ public class CrashHandler implements Thread.UncaughtExceptionHandler {
         collectDeviceInfo(mContext);\r
         // 保存日志文件\r
         saveCrashInfo2File(ex);\r
+        //设置断网状态\r
+        Util.setSystemProperties("persist.sys.server_connected","false");\r
         return true;\r
     }\r
 \r
index dcd3240..41c8bcb 100644 (file)
@@ -24,6 +24,7 @@ import android.widget.Toast;
 import com.enqualcomm.support.bean.Contact;\r
 import com.enqualcomm.support.bean.ICLocation;\r
 import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.service.AudioService;\r
 import com.enqualcomm.support.service.Deliver;\r
 import com.enqualcomm.support.service.SmsDatabaseChaneObserver;\r
 import com.enqualcomm.support.utils.APNUtil;\r
@@ -39,6 +40,7 @@ import com.enqualcomm.support.utils.ServiceUtil;
 import com.enqualcomm.support.utils.SimSignalUtil;\r
 import com.enqualcomm.support.utils.TimeUtil;\r
 import com.enqualcomm.support.utils.Util;\r
+import com.enqualcomm.support.utils.VibrateUtil;\r
 import com.enqualcomm.support.utils.ftpUtils;\r
 import com.ic.protocols.protocolAPIHelper;\r
 \r
@@ -1193,7 +1195,19 @@ public class ICSmsManager  extends BroadcastReceiver {
             try {\r
                 msgtype = Integer.parseInt(list[1]);\r
             }catch ( Exception e){}\r
+            if(CoreService.getInstance()!=null)\r
             CoreService.getInstance().getRuntime().getContextProxy().sendMsgBroadcast(arg, msgtype);\r
+        }else if(cmd.startsWith("playnotifiy")) {\r
+\r
+            AudioService.getInstance().play(runtime.getContextProxy().context.getAssets(), "ring_msg.mp3");\r
+            VibrateUtil.getInstance(runtime.getContextProxy().context).VibrateOn(true);\r
+\r
+        }else if(cmd.startsWith("DeliverSMS")) {\r
+\r
+           if(CoreService.getInstance()!=null){\r
+               Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime));\r
+           }\r
+\r
         }\r
     }\r
 }
\ No newline at end of file
index dbce6d9..237ff0d 100644 (file)
@@ -180,26 +180,28 @@ public class Runtime {
     public int Cut_off_flag=0;\r
 \r
   public enum AlarmType{\r
-      ALARM_SOS,\r
-      ALARM_LOWBATTERY,\r
-      ALARM_ANTIOFF,\r
-      ALARM_WEARED,\r
+      ALARM_SOS, //sos\r
+      ALARM_LOWBATTERY, //低电\r
+      ALARM_ANTIOFF, //脱腕报警\r
+      ALARM_WEARED, //佩戴\r
       ALARM_CUTOFF,//剪断报警\r
-      ALARM_FALL,\r
-      ALARM_ABNORMAL_HEART_RATE,\r
-      ALARM_HEART_RATE_HIGH,\r
-      ALARM_HEART_RATE_LOW,\r
-      ALARM_BPH_HIGH,\r
-      ALARM_BPH_LOW,\r
-      ALARM_BPL_HIGH,\r
-      ALARM_BPL_LOW,\r
+      ALARM_FALL, //跌倒\r
+      ALARM_ABNORMAL_HEART_RATE, //心率异常\r
+      ALARM_HEART_RATE_HIGH, //心率高\r
+      ALARM_HEART_RATE_LOW, //心率低\r
+      ALARM_BPH_HIGH, //高压高\r
+      ALARM_BPH_LOW, //高压低\r
+      ALARM_BPL_HIGH, //低压高\r
+      ALARM_BPL_LOW,  //低压低\r
       ALARM_SEDENTARY, //久坐提醒\r
-      ALARM_ILLEGAL_CUTOFF,\r
-      ALARM_LOCK_WATCH,\r
-      ALARM_TEMP_HIGH,\r
-      ALARM_TEMP_LOW,\r
-      ALARM_POWER_OFF,\r
-      ALARM_ESCAPE,\r
+      ALARM_ILLEGAL_CUTOFF, //剪断\r
+      ALARM_LOCK_WATCH, //锁定\r
+      ALARM_TEMP_HIGH, //体温高\r
+      ALARM_TEMP_LOW, //体温低\r
+      ALARM_POWER_OFF, //关机\r
+      ALARM_ESCAPE, //逃逸\r
+      ALARM_UNREADMSG, //消息未读\r
+      ALARM_MSGREAD, //消息已读\r
       ALARM_NONE,\r
     };\r
 \r
@@ -218,6 +220,7 @@ public class Runtime {
  *    00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警,\r
  *    07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低,\r
  *    14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低) 19 关机事件(非服务器指令关机), 20,escape逃跑事件(离开蓝牙管控范围)\r
+     *    21, 消息未读 , 22消息已读\r
   */\r
    public boolean setAlarmType(AlarmType alarm){\r
 //    if ( !fall && !lowbattery && !sos && antioff)\r
@@ -300,9 +303,15 @@ public class Runtime {
           case ALARM_POWER_OFF:\r
               alarmType="19";\r
               break;\r
-          case ALARM_NONE:\r
+          case ALARM_ESCAPE:\r
               alarmType="20";\r
               break;\r
+          case ALARM_UNREADMSG:\r
+              alarmType="21";\r
+              break;\r
+          case ALARM_MSGREAD:\r
+              alarmType="22";\r
+              break;\r
           default:\r
               alarmType="00";\r
               break;\r
index f19e757..b43025d 100644 (file)
@@ -103,6 +103,7 @@ public class Deliver extends AbstractConnectionService {
     delaySendMSG = new Runnable() {\r
       @Override\r
       public void run() {\r
+        mSendMSGHandler.removeCallbacks(delaySendMSG);\r
         if (getAndSendMsgFromQueue()==true){\r
           mSendMSGHandler.postDelayed(delaySendMSG,5000L);\r
         }\r
@@ -140,6 +141,8 @@ public class Deliver extends AbstractConnectionService {
     return ret;\r
   }\r
   public static void triggerSendThread() {\r
+\r
+    mSendMSGHandler.removeCallbacks(delaySendMSG);\r
     mSendMSGHandler.post(delaySendMSG);\r
     ICLogger.i("triggerSendThread ");\r
 //    delaySendMSG.run();\r
@@ -192,11 +195,16 @@ public class Deliver extends AbstractConnectionService {
                 ICLogger.logToFile("APILog", "response failed retry !  " +CheckCount+" " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
             }\r
             CheckCount++;\r
-          }else{ //否则 可能是还没有发送过数据,或者超过重试次数,继续提取queue中数据进行发送\r
-            ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip ");\r
-            if (Config.LOG_TOFILE)\r
-              ICLogger.logToFile("APILog", "response timeout skip!  " );\r
-            CheckCount=0;\r
+            //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送\r
+            if (CheckCount>5){\r
+              ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip ");\r
+              if (Config.LOG_TOFILE)\r
+                ICLogger.logToFile("APILog", "response timeout skip!  " );\r
+              CheckCount=0;\r
+              if(mLock!=null && mLock.isLocked())\r
+                mLock.unlock();\r
+              return false;\r
+            }\r
           }\r
         }\r
 \r
@@ -347,7 +355,7 @@ public class Deliver extends AbstractConnectionService {
     if (NeedCheckServerResponse==true){\r
 \r
       if(needCheckResponseCMD!=null) {\r
-        ICLogger.i("mqtt ====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD));\r
+        ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD));\r
         if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){\r
           ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!");\r
           ServerResponsed=true;\r
index f432894..980894e 100644 (file)
@@ -382,11 +382,13 @@ public class ContextProxy {
             VibrateUtil.getInstance(_context).VibrateOnOnce(true);\r
             Util.mSleep(2000);\r
           }\r
-          Intent intent = new Intent(ActionSrvPushTxt);\r
-          intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息\r
-          intent.putExtra("txtMsg", msg);\r
-          intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
-          _context.sendBroadcast(intent);\r
+          if(Config.noBroadCastPushTxtNotify==false) {\r
+            Intent intent = new Intent(ActionSrvPushTxt);\r
+            intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息\r
+            intent.putExtra("txtMsg", msg);\r
+            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
+            _context.sendBroadcast(intent);\r
+          }\r
         }\r
       },50);\r
 \r
@@ -405,11 +407,13 @@ public class ContextProxy {
             VibrateUtil.getInstance(_context).VibrateOnOnce(true);\r
             Util.mSleep(2000);\r
           }\r
-          Intent intent = new Intent(ActionSrvPushTxt);\r
-          intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
-          intent.putExtra("txtMsg", msg);\r
-          intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
-          _context.sendBroadcast(intent);\r
+          if(Config.noBroadCastPushTxtNotify==false) {\r
+            Intent intent = new Intent(ActionSrvPushTxt);\r
+            intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
+            intent.putExtra("txtMsg", msg);\r
+            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
+            _context.sendBroadcast(intent);\r
+          }\r
         }\r
       },50);\r
 \r
@@ -429,12 +433,13 @@ public class ContextProxy {
             VibrateUtil.getInstance(_context).VibrateOnOnce(true);\r
             Util.mSleep(2000);\r
           }\r
-\r
-          Intent intent = new Intent(ActionSrvPushTxt);\r
-          intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
-          intent.putExtra("txtMsg", msg);\r
-          intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
-          _context.sendBroadcast(intent);\r
+          if(Config.noBroadCastPushTxtNotify==false) {\r
+            Intent intent = new Intent(ActionSrvPushTxt);\r
+            intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
+            intent.putExtra("txtMsg", msg);\r
+            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
+            _context.sendBroadcast(intent);\r
+          }\r
         }\r
       },50);\r
     }\r
index 7e31182..49e09a2 100644 (file)
@@ -10,6 +10,26 @@ public class ICAudioManager {
     private static int saved_volumn = 0;
     public static boolean needMute = false;
 
+    public static void setMasterVolumn(Context context,int volume) {
+        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+        int maxvolume=audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
+        ICLogger.i("======setVolumn "+volume +" maxvolmun "+maxvolume);
+        if( volume>maxvolume) {
+            volume = maxvolume;
+        }
+        if(volume<0){
+            volume=0;
+        }
+        if (audioManager != null) {
+            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,volume,AudioManager.FLAG_PLAY_SOUND);
+            audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION,volume,AudioManager.FLAG_PLAY_SOUND);
+            audioManager.setStreamVolume(AudioManager.STREAM_ALARM,volume,AudioManager.FLAG_PLAY_SOUND);
+            audioManager.setStreamVolume(AudioManager.STREAM_RING,volume,AudioManager.FLAG_PLAY_SOUND);
+        }
+//        SimSignalUtil.SetRingMode(context, AudioManager.RINGER_MODE_SILENT, false);
+//        CloseSpeaker(context);//
+    }
+
     public static void setVolumnMute(Context context) {
         AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
         ICLogger.i("======setVolumnMute");
index 5de3340..1a3d039 100644 (file)
@@ -192,8 +192,19 @@ public class ProcessReceiver extends BroadcastReceiver {
         public void onClick(DialogInterface var1, int var2) {\r
           var1.dismiss();\r
           VibrateUtil.getInstance(context).VibrateOn(false);\r
+\r
+\r
           if(CoreService.getInstance()!=null) {\r
-            CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(CoreService.getInstance().getRuntime()));\r
+            Runtime runtime=CoreService.getInstance().getRuntime();\r
+            if(Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN"))\r
+            {\r
+              runtime.setAlarmType(Runtime.AlarmType.ALARM_MSGREAD);\r
+              Config.setLastUnReadMessage(CoreService.getInstance(),"");\r
+              Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));\r
+            }else{\r
+              CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(runtime));\r
+            }\r
+\r
           }\r
         }\r
       }).create();\r
index b2c5083..66e29b6 100644 (file)
@@ -50,10 +50,13 @@ import java.util.zip.ZipFile;
 import java.util.zip.ZipOutputStream;\r
 \r
 \r
+import com.enqualcomm.support.Config;\r
 import com.enqualcomm.support.CoreService;\r
 import com.enqualcomm.support.bean.Runtime;\r
 import com.enqualcomm.support.bean.VoiceContent;\r
 import com.enqualcomm.support.bean.voicePacket;\r
+import com.enqualcomm.support.service.Deliver;\r
+import com.ic.protocols.protocolAPIHelper;\r
 \r
 import static android.content.Context.CONNECTIVITY_SERVICE;\r
 import static android.content.Context.WIFI_SERVICE;\r
@@ -76,6 +79,40 @@ public class Util {
     }catch ( Exception e){}\r
   }\r
 \r
+  public static void checkMesageNeedNotifi(String msg,Runtime runtime){\r
+\r
+    if(msg!=null ) {\r
+      //msg 格式  index,20201111182000,003f99302994\r
+      String list[]= msg.split(",");\r
+      if(list.length==3) {\r
+        String index=list[0];\r
+        String datetime=list[1];\r
+        String txtmsg=list[2];\r
+\r
+        long lasttime_inms=System.currentTimeMillis()-TimeUtil.parseDatetiime(datetime).getTime();\r
+        ICLogger.i("有消息"+lasttime_inms/1000 +"秒未读!");\r
+        if ((lasttime_inms>=8*60*1000 && lasttime_inms<=13*60*1000)  //在10分钟,20分钟时都提醒一次。\r
+            ||(lasttime_inms>18*60*1000 && lasttime_inms<=23*60*1000))\r
+        {\r
+\r
+          if (!Config.custom_name.equals("VitracK")){\r
+            txtmsg = Util.UrlGB2312ToUTF8(txtmsg);\r
+          }\r
+          if(Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN"))\r
+          {\r
+            runtime.setAlarmType(Runtime.AlarmType.ALARM_UNREADMSG);\r
+          //  Config.setLastUnReadMessage(CoreService.getInstance(),"");\r
+            Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));\r
+          }\r
+          runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0);\r
+        }\r
+\r
+\r
+      }else{\r
+        ICLogger.i("UnreadMsg format error !");\r
+      }\r
+    }\r
+  }\r
 \r
   public static boolean installed(Context context,String appPackageName) {\r
     PackageManager packageManager = context.getPackageManager();// 获取packagemanager\r
index f8f4153..8baa2c7 100644 (file)
@@ -19,25 +19,37 @@ public class VibrateUtil {
     private  static Vibrator vibrator = null;\r
     private static VibrateUtil vibrateUtil=null;\r
 \r
-    private final  long[] patter = {1000, 1000, 1000, 1000}; //1秒开,1秒关,2秒开,50ms关\r
-    private final  long[] patterOnce = {1000, 1000}; //1秒开,1秒关,2秒开,50ms关\r
+    private static long patter_item= 1000;\r
+    private long[] patter = {patter_item, 1000, patter_item, 1000}; //1秒开,1秒关,2秒开,50ms关\r
+    private long[] patterOnce = {patter_item, 1000}; //1秒开,1秒关,2秒开,50ms关\r
 \r
+    /**\r
+     * 设置震动时长\r
+     * @param l 单位ms\r
+     */\r
+    public static void setVibPattern(int l){\r
+        patter_item=l;\r
+    }\r
     public void VibrateOn(boolean on){\r
-        if(vibrator!=null) {\r
-            if (on)\r
+        if (patter_item>0) {\r
+            if (vibrator != null) {\r
+                if (on)\r
 //                vibrator.vibrate(patter, 0);//一直循环\r
-                vibrator.vibrate(patter, -1);//不循环\r
-            else\r
-                vibrator.cancel();\r
+                    vibrator.vibrate(patter, -1);//不循环\r
+                else\r
+                    vibrator.cancel();\r
+            }\r
         }\r
     }\r
     public void VibrateOnOnce(boolean on){\r
-        if(vibrator!=null) {\r
-            if (on)\r
+        if (patter_item>0) {\r
+            if (vibrator != null) {\r
+                if (on)\r
 //                vibrator.vibrate(patter, 0);//一直循环\r
-                vibrator.vibrate(patterOnce, -1);//不循环\r
-            else\r
-                vibrator.cancel();\r
+                    vibrator.vibrate(patterOnce, -1);//不循环\r
+                else\r
+                    vibrator.cancel();\r
+            }\r
         }\r
     }\r
 }\r
index e28e300..7492bdf 100644 (file)
@@ -22,10 +22,12 @@ import com.enqualcomm.support.bean.voicePacket;
 import com.enqualcomm.support.service.HeartRateManager;\r
 import com.enqualcomm.support.utils.CameraUtil;\r
 import com.enqualcomm.support.utils.Connection;\r
+import com.enqualcomm.support.utils.ICAudioManager;\r
 import com.enqualcomm.support.utils.ICLogger;\r
 import com.enqualcomm.support.utils.TemperatureUtil;\r
 import com.enqualcomm.support.utils.TimeUtil;\r
 import com.enqualcomm.support.utils.Util;\r
+import com.enqualcomm.support.utils.VibrateUtil;\r
 import com.enqualcomm.support.utils.WakeLockUtil;\r
 \r
 import java.io.File;\r
@@ -155,8 +157,14 @@ public class protocol_ic {
         BPTQ,\r
         APAT,//剪断消息开关\r
         BPAT,\r
-        APBT, //设置蓝牙扫描间隔\r
-        BPBT,\r
+        APBT,\r
+        BPBT,//设置蓝牙扫描间隔\r
+        APWL,\r
+        BPWL,//设置白名单\r
+        AP65,\r
+        BP65,//设置音量\r
+        AP47,\r
+        BP47,//设置震动\r
         UNKNOWN_CMD,\r
     }\r
 \r
@@ -267,7 +275,12 @@ public class protocol_ic {
         cmdMap.put(CMD_TYPE.BPAT, "BPAT");\r
         cmdMap.put(CMD_TYPE.APBT, "APBT");\r
         cmdMap.put(CMD_TYPE.BPBT, "BPBT");\r
-\r
+        cmdMap.put(CMD_TYPE.APWL, "APWL");\r
+        cmdMap.put(CMD_TYPE.BPWL, "BPWL");\r
+        cmdMap.put(CMD_TYPE.AP65, "AP65");\r
+        cmdMap.put(CMD_TYPE.BP65, "BP65");\r
+        cmdMap.put(CMD_TYPE.AP47, "AP47");\r
+        cmdMap.put(CMD_TYPE.BP47, "BP47");\r
     }\r
 \r
 \r
@@ -1231,6 +1244,9 @@ public class protocol_ic {
         if (cmdlist.length == 4){\r
             String cmdindex=cmdlist[2];\r
             String txtmsg=cmdlist[3];\r
+            StringBuilder sb=new StringBuilder();\r
+            runtime.PushtxtMsg_srv_index=cmdindex;//给回复AP94用\r
+            sb.append(cmdindex).append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss()).append(CMDSPLIT).append(txtmsg);\r
             if (Config.custom_name.equals("VitracK")){\r
 \r
             }else{\r
@@ -1241,6 +1257,7 @@ public class protocol_ic {
             //设定当前工作模式及循环频率\r
             connection.send(msg);\r
             ICLogger.i("received Txt Msg "+txtmsg);\r
+            Config.setLastUnReadMessage(runtime.getContextProxy().context,sb.toString());\r
             runtime.getContextProxy().sendMsgBroadcast(txtmsg,0);\r
             runtime.getContextProxy().saveMstToSMSDB(txtmsg);\r
         }else{\r
@@ -2683,6 +2700,224 @@ public class protocol_ic {
         }\r
     }\r
 \r
+    /**\r
+     * 85.设置联系人白名单(10个)(下行协议:BPWL,响应:APWL)\r
+     * 示例:\r
+     * IWBPWL,353456789012345,080835,D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx #\r
+     * 说明:\r
+     * IW:标识符\r
+     * BPWL : 命令字符\r
+     * 353456789012345:IMEI号,设备唯一ID\r
+     * 080835 :指令流水号\r
+     * D3590D54|135xxxxxxxxxx|9507xxxxxxxx : 一组联系人,使用|分隔名称和电话号码和绑定号码,名称使用UNICODE编码直接下发byte,多组之间使用逗号分隔,未填写的可为空,但位置仍需保留\r
+     * 设备响应: IWAPWL,080835, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx#\r
+     * 080835: 设备响应的时候带上响应流水号\r
+     * D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx回复设备当前设置的主控号码供平台同步使用\r
+     * 说明:       本消息适用所有终端\r
+     */\r
+    public static StringMessage  APWL(String index,String[] phnumbs){\r
+        return genStringMessage("APWL",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APWL))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDSPLIT).append(phnumbs[0])\r
+                .append(CMDSPLIT).append(phnumbs[1])\r
+                .append(CMDSPLIT).append(phnumbs[2])\r
+                .append(CMDSPLIT).append(phnumbs[3])\r
+                .append(CMDSPLIT).append(phnumbs[4])\r
+                .append(CMDSPLIT).append(phnumbs[5])\r
+                .append(CMDSPLIT).append(phnumbs[6])\r
+                .append(CMDSPLIT).append(phnumbs[7])\r
+                .append(CMDSPLIT).append(phnumbs[8])\r
+                .append(CMDSPLIT).append(phnumbs[9])\r
+                .append(CMDEND).toString());\r
+    }\r
+    //设置通讯录,白名单(10个)\r
+    public void handleBPWL(Connection connection,String cmd , Runtime runtime){\r
+//        IWBPWL,867155030001063,357444,9b44529b|13554820016,,,,,,,,,\r
+/**\r
+ * IWBPWL,353456789012345,080835,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx#\r
+ */\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        String[] phnums=new String[]{"","","","","","","","","",""};\r
+        StringBuffer sb=new StringBuffer().append("recv phone Numbs ");\r
+        if (cmdlist.length>=3){\r
+            switch (cmdlist.length){\r
+                case 13:\r
+                    phnums[9]=cmdlist[12];\r
+                    sb.append(phnums[9]).append(",");\r
+                case 12:\r
+                    phnums[8]=cmdlist[11];\r
+                    sb.append(phnums[8]).append(",");\r
+                case 11:\r
+                    phnums[7]=cmdlist[10];\r
+                    sb.append(phnums[7]).append(",");\r
+                case 10:\r
+                    phnums[6]=cmdlist[9];\r
+                    sb.append(phnums[6]).append(",");\r
+                case 9:\r
+                    phnums[5]=cmdlist[8];\r
+                    sb.append(phnums[5]).append(",");\r
+                case 8:\r
+                    phnums[4]=cmdlist[7];\r
+                    sb.append(phnums[4]).append(",");\r
+                case 7:\r
+                    phnums[3]=cmdlist[6];\r
+                    sb.append(phnums[3]).append(",");\r
+                case 6:\r
+                    phnums[2]=cmdlist[5];\r
+                    sb.append(phnums[2]).append(",");\r
+                case 5:\r
+                    phnums[1]=cmdlist[4];\r
+                    sb.append(phnums[1]).append(",");\r
+                case 4:\r
+                    phnums[0]=cmdlist[3];\r
+                    sb.append(phnums[0]).append(",");\r
+\r
+            }\r
+\r
+            String index=cmdlist[2];\r
+            ICLogger.i(sb.toString());\r
+            connection.send(AP14(index,phnums));\r
+            ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
+\r
+            if(Config.custom_name.equals("YT")) {\r
+                ICLogger.i("=====add hotline 96885 ");\r
+                contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));\r
+            }\r
+            for (int i=0; i< phnums.length;i++){\r
+                String[] tmp= phnums[i].split("\\|");\r
+                if (tmp.length==2){\r
+                    String name= Util.decodeUnicode2Utf8(tmp[0]);\r
+                    String phonem=tmp[1];\r
+                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem);\r
+                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
+                }else{\r
+                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length);\r
+\r
+                }\r
+            }\r
+//            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));\r
+\r
+            runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);\r
+\r
+        }else{\r
+            ICLogger.i(" BPWL format error!");\r
+        }\r
+\r
+    }\r
+\r
+\r
+\r
+\r
+    public static StringMessage AP65(String id,String cy)\r
+    {\r
+        return genStringMessage("AP65",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP65))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDSPLIT).append(cy)\r
+                .append(CMDEND).toString());\r
+    }\r
+\r
+    public void handleBP65( Connection connection,Runtime runtime,String cmd) {\r
+/***\r
+ * 36.音量设置(下行协议:BP65,响应:AP65)\r
+ * 示例:\r
+ * IWBP65,353456789012345,080835,1#\r
+ * 说明:\r
+ * IW:标识符\r
+ * BP65: 命令字符\r
+ * 353456789012345:IMEI号,设备唯一ID\r
+ * 080835 :指令流水号\r
+ * 1 : 表示音量等级为1\r
+ * 设备响应:     IWAP65,080835, 1#\r
+ * 080835: 设备响应的时候带上响应流水号\r
+ * 1: 表示指令执行成功,音量等级为1\r
+ */\r
+\r
+        log("BP65 "+cmd);\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length==4){\r
+            String id=cmdlist[2];\r
+            String cycle=cmdlist[3].replace("#","");\r
+            connection.send(AP65(id,cycle));\r
+\r
+            if(Util.isNumeric(cycle)){\r
+                int mastervolume=Integer.parseInt(cycle);\r
+\r
+                ICLogger.i("设置音量 "+mastervolume);\r
+                //实际设备音量 0~15  协议音量0~7需要转换\r
+                int volume=mastervolume*2;\r
+                if (volume<0)volume=0;\r
+                if(volume>=14) volume=15;\r
+                Config.setMasterVolume(runtime.getContextProxy().context,mastervolume*2);\r
+                ICAudioManager.setMasterVolumn(runtime.getContextProxy().context,mastervolume*2);\r
+\r
+            }else{\r
+                ICLogger.i(" BP65 Format error!");\r
+            }\r
+\r
+        }else{\r
+            ICLogger.i(" BP65 Format error!");\r
+        }\r
+    }\r
+\r
+    public static StringMessage AP47(String id,String cycle)\r
+    {\r
+        return genStringMessage("AP47",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP47))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDSPLIT).append(cycle)\r
+                .append(CMDEND).toString());\r
+    }\r
+\r
+\r
+    public void handleBP47( Connection connection,Runtime runtime,String cmd) {\r
+/***\r
+ * 37.震动设置(下行协议号:BP47,响应:AP47)\r
+ * 示例:\r
+ * IWBP47,353456789012345,080835,10#\r
+ * 说明:\r
+ * IW:标识符\r
+ * BP47 : 命令字符\r
+ * 353456789012345:IMEI号,设备唯一ID\r
+ * 080835 :指令流水号\r
+ * 10: 表示震动时长,此处单位为称,表示震动10秒钟\r
+ * 设备响应:     IWAP47,080835,1#\r
+ * 080835:指令流水号\r
+ * 1:表示设备执行成功,0 表示设备执行失败\r
+ */\r
+\r
+        log("BP47 "+cmd);\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length==4){\r
+            String id=cmdlist[2];\r
+            String cycle=cmdlist[3].replace("#","");\r
+            connection.send(AP47(id,cycle));\r
+\r
+            if(Util.isNumeric(cycle)){\r
+                int vibduration=Integer.parseInt(cycle);\r
+                ICLogger.i("设置震动时长 "+vibduration+" 秒");\r
+                Config.setDurationOfVibration(runtime.getContextProxy().context,vibduration);\r
+                VibrateUtil.setVibPattern(vibduration*1000);\r
+\r
+            }else{\r
+                ICLogger.i(" BP47 Format error!");\r
+            }\r
+\r
+        }else{\r
+            ICLogger.i(" BP47 Format error!");\r
+        }\r
+    }\r
     public boolean handleCmd(CMD_TYPE type, String cmd) {\r
 \r
            //普通非二进制命令用此函数处理\r
@@ -2769,6 +3004,11 @@ public class protocol_ic {
                 handleBP14(mConnection,cmd,mRuntime);\r
                 ICLogger.i("收到服务器设置白名单号码命令BP14");\r
                 break;\r
+            case BPWL:\r
+                //收到设置白名单号码\r
+                handleBPWL(mConnection,cmd,mRuntime);\r
+                ICLogger.i("收到服务器设置白名单号码命令BPWL");\r
+                break;\r
             case BP15:\r
                 handleBP15(cmd,mConnection,mRuntime);\r
                 ICLogger.i("收到服务器设置定位命令BP15");\r
@@ -2904,6 +3144,13 @@ public class protocol_ic {
                 handleBPBT(mConnection,mRuntime,cmd);\r
                 break;\r
 \r
+            case BP65://声音设置\r
+                handleBP65(mConnection,mRuntime,cmd);\r
+                break;\r
+            case BP47://震动设置\r
+                handleBP47(mConnection,mRuntime,cmd);\r
+                break;\r
+\r
         }\r
 \r
         return ret;\r
index d42f780..f1917ce 100644 (file)
             android:text="@string/title_alert"\r
             style="@style/text_18_ffffff"\r
             android:textSize="30sp" />\r
+        <ScrollView\r
+            style="@android:style/Widget.DeviceDefault.Light.HorizontalScrollView"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:scrollbars="vertical">\r
         <LinearLayout\r
             android:gravity="center"\r
             android:id="@id/noticeContent"\r
-            android:layout_width="fill_parent"\r
+            android:orientation="vertical"\r
+            android:layout_width="wrap_content"\r
             android:layout_height="wrap_content">\r
             <TextView\r
                 android:gravity="center|left"\r
                 android:lineSpacingMultiplier="1.5"\r
                 style="@style/text_16_666666"\r
                 android:textSize="25sp"/>\r
-        </LinearLayout>\r
-        <View\r
-            android:background="#ffd0d0d0"\r
-            android:layout_width="fill_parent"\r
-            android:layout_height="1.0px" />\r
-        <LinearLayout\r
-            android:gravity="center"\r
-            android:layout_gravity="bottom"\r
-            android:orientation="horizontal"\r
-            android:background="@drawable/bg_bombbox"\r
-            android:layout_width="fill_parent"\r
-            android:layout_height="60.0dip">\r
-            <ImageButton\r
-                android:gravity="center"\r
-                android:id="@id/positiveButton"\r
-                android:background="#00000000"\r
-                android:layout_width="0.0dip"\r
-                android:layout_height="wrap_content"\r
-                android:src="@drawable/btn_ok_selector"\r
-                android:text="@string/ok"\r
-                android:layout_weight="1.0" style="@style/text_15_ffffff_sdw" />\r
-            <ImageButton\r
+            <View\r
+                android:background="#ffd0d0d0"\r
+                android:layout_width="fill_parent"\r
+                android:layout_height="1.0px" />\r
+            <LinearLayout\r
                 android:gravity="center"\r
-                android:id="@id/negativeButton"\r
-                android:background="#00000000"\r
-                android:layout_width="0.0dip"\r
-                android:layout_height="wrap_content"\r
-                android:layout_marginLeft="20.0dip"\r
-                android:src="@drawable/btn_cancel_selector"\r
-                android:text="@string/cancel"\r
-                android:layout_weight="1.0"\r
-                style="@style/text_15_666666_sdw" />\r
+                android:layout_gravity="bottom"\r
+                android:orientation="horizontal"\r
+                android:background="@drawable/bg_bombbox"\r
+                android:layout_width="fill_parent"\r
+                android:layout_height="60.0dip">\r
+                <ImageButton\r
+                    android:gravity="center"\r
+                    android:id="@id/positiveButton"\r
+                    android:background="#00000000"\r
+                    android:layout_width="0.0dip"\r
+                    android:layout_height="wrap_content"\r
+                    android:src="@drawable/btn_ok_selector"\r
+                    android:text="@string/ok"\r
+                    android:layout_weight="1.0" style="@style/text_15_ffffff_sdw" />\r
+                <ImageButton\r
+                    android:gravity="center"\r
+                    android:id="@id/negativeButton"\r
+                    android:background="#00000000"\r
+                    android:layout_width="0.0dip"\r
+                    android:layout_height="wrap_content"\r
+                    android:layout_marginLeft="20.0dip"\r
+                    android:src="@drawable/btn_cancel_selector"\r
+                    android:text="@string/cancel"\r
+                    android:layout_weight="1.0"\r
+                    style="@style/text_15_666666_sdw" />\r
+            </LinearLayout>\r
         </LinearLayout>\r
+        </ScrollView>\r
+\r
     </LinearLayout>\r
 </FrameLayout>
\ No newline at end of file
index 9c22d76..1c806fc 100644 (file)
@@ -1,2 +1,2 @@
-#Fri Nov 06 15:56:55 CST 2020\r
-VERSION_CODE=689\r
+#Wed Nov 11 23:33:52 CST 2020\r
+VERSION_CODE=692\r