1、添加BP00对时间、时区的设置
authorsnickersun <snickersun@qq.com>
Wed, 6 May 2020 16:57:54 +0000 (00:57 +0800)
committersnickersun <snickersun@qq.com>
Wed, 6 May 2020 16:57:54 +0000 (00:57 +0800)
2、SMScmd listen可以正常拨号,但是有界面。
3、添加persist.sys.NoLocationCycle 配置,设置为true的话,会禁用周期定时定位。

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/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/NMEAListener.java
app/src/main/java/com/enqualcomm/support/adapter/protocolAPIHelper.java
app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java
app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java
app/src/main/java/com/enqualcomm/support/utils/Util.java

index 7d0f7a6..5d47128 100644 (file)
@@ -9,6 +9,7 @@ import com.enqualcomm.support.bean.Runtime;
 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
 \r
 import org.json.JSONException;\r
 import org.json.JSONStringer;\r
@@ -294,5 +295,14 @@ public class Config {
     ICLogger.i("Current BootDate="+currentDate+", Last BootDate="+lastDate+", ret="+ret);\r
     return ret;\r
   }\r
+\r
+  public final static boolean noLocationCycle=getNoLocationCycleFlag();\r
+  public static boolean getNoLocationCycleFlag(){\r
+      String tmp=Util.getSystemProperties("persist.sys.NoLocationCycle");\r
+      boolean ret=false;\r
+      if (tmp.equals("true"))\r
+          ret=true;\r
+     return ret;\r
+  }\r
 }\r
 \r
index ad69682..8e5b7a5 100644 (file)
@@ -828,7 +828,10 @@ public class CoreService extends Service {
                 break;\r
         }\r
 \r
-        AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context,cycle, ACTION_LOCATION_ALARM);\r
+        if (Config.noLocationCycle==false)\r
+            AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context,cycle, ACTION_LOCATION_ALARM);\r
+        else\r
+            ICLogger.i("skip set LocationAlarm " );\r
         sb.append(" setLocationAlarm  "+ACTION_LOCATION_ALARM+" mod "+mod+", cycle in Seconds "+cycle);\r
         ICLogger.i(sb.toString());\r
         if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());\r
@@ -892,7 +895,7 @@ public class CoreService extends Service {
         }\r
     }\r
 \r
-     private static final String TAG = "ICSrv." + CoreService.class.getSimpleName();\r
+    private static final String TAG = "ICSrv." + CoreService.class.getSimpleName();\r
 \r
     private ScheduledThreadPoolExecutor mTimer_retry_connect=null;\r
 \r
index 297e77f..00bce7e 100644 (file)
@@ -25,6 +25,7 @@ import com.enqualcomm.support.utils.DeviceInfoUtil;
 import com.enqualcomm.support.utils.ICHttpUtil;\r
 import com.enqualcomm.support.utils.ICLogger;\r
 import com.enqualcomm.support.utils.ServiceUtil;\r
+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.ftpUtils;\r
@@ -740,8 +741,8 @@ public class ICSmsManager {
                 }\r
             } else if (sms.equals(ENCRYPED_HEADER+"#listen#")) {\r
                 sendSMS(phonenumber, "start listen !");\r
-                CellInfoUtil.dialSilent(runtime.getContextProxy().context,phonenumber);\r
-\r
+//                CellInfoUtil.dialSilent(runtime.getContextProxy().context,phonenumber);\r
+                SimSignalUtil.send_at_cmd(runtime,"atd"+phonenumber+";");\r
             } else if (sms.equals(ENCRYPED_HEADER+"#location#")) {\r
 \r
                 sendSMS(phonenumber, "start location mode "+runtime.getLocationInstance().getWorkingMod()+"!");\r
index d232433..038c34b 100644 (file)
@@ -77,7 +77,10 @@ public class NMEAListener implements NmeaListener, LocationListener {
 \r
 \r
   public void setNoStop(boolean nostop) {\r
-    noStop = nostop;\r
+    if (Config.noLocationCycle==false)\r
+      noStop = nostop;\r
+    else\r
+        ICLogger.i("skip setNoStop " + nostop);\r
     ICLogger.i("setNoStop " + nostop);\r
     if (noStop == false) {\r
       switch (runtime.getLocationInstance().getWorkingMod()) {\r
index bbb8045..5c79bc2 100644 (file)
@@ -31,7 +31,9 @@ import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;\r
 \r
 import java.io.File;\r
+import java.sql.Time;\r
 import java.util.ArrayList;\r
+import java.util.Date;\r
 import java.util.HashMap;\r
 \r
 import static com.enqualcomm.support.Constants.ACTION_EQC_ALARM;\r
@@ -310,7 +312,7 @@ public class protocolAPIHelper {
     }\r
 \r
     //处理 登录 BP00\r
-    public void handleBP00(String cmd){\r
+    public void handleBP00(Runtime runtime,String cmd){\r
         String[] msg=cmd.split(CMDSPLIT);\r
 //        get Msg :IWBP00,20191229171933,8# (size)24\r
 //        12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 ,  IWBP00,20191229171933,8\r
@@ -318,6 +320,22 @@ public class protocolAPIHelper {
         if (msg.length>=3) {\r
             log("handleBP00", "Set Datetime " + msg[1]);\r
             log("handleBP00", "Set TimeZone " + msg[2]);\r
+\r
+            Date datetime=TimeUtil.parseDatetiime(msg[1]);\r
+            int timezone=Integer.parseInt(msg[2]);\r
+            if (datetime!=null){\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setTimeZone(timezone);\r
+\r
+\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone);\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+\r
+            }\r
+//            Set Datetime 20200505112734\r
+//            Set TimeZone 8\r
+\r
         }else{\r
             log("handleBP00","format Error");\r
         }\r
index 38b56fa..83bba98 100644 (file)
@@ -55,7 +55,7 @@ public class NettyConnection implements Connection {
                     if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd);\r
                         switch (type){\r
                             case BP00:\r
-                                API.handleBP00(cmd);\r
+                                API.handleBP00(runtime,cmd);\r
                                 ICLogger.i("服务器收到登录包AP00");\r
                                 DeliverCMDMessageToSystem("BP00",cmd);//通知下面线程状态变化\r
                                 break;\r
index 0571dc8..db86919 100644 (file)
@@ -1,10 +1,16 @@
 package com.enqualcomm.support.utils;\r
 \r
+import android.app.AlarmManager;\r
+import android.content.Context;\r
+import android.provider.Settings;\r
+import android.text.format.DateFormat;\r
+\r
 import java.text.ParseException;\r
 import java.text.SimpleDateFormat;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
 import java.util.Locale;\r
+import java.util.TimeZone;\r
 \r
 public class TimeUtil {\r
   public static String getLocalTime() { return getLocalTime(System.currentTimeMillis()); }\r
@@ -33,19 +39,22 @@ public class TimeUtil {
 \r
 \r
 \r
-  public static void parseDatetiime(String datetimeStr){\r
+  public static Date parseDatetiime(String datetimeStr){\r
 \r
     SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH);//输入的被转化的时间格式\r
     SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//需要转化成的时间格式\r
     SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");\r
+    SimpleDateFormat df3 = new SimpleDateFormat("yyyyMMddHHmmss");\r
     Date date1 = null;\r
     try {\r
-      date1 = dff.parse(datetimeStr);\r
+      date1 = df3.parse(datetimeStr);\r
+      return date1;\r
     } catch (ParseException e) {\r
       e.printStackTrace();\r
+      return null;\r
     }\r
-    String str1 = df1.format(date1);\r
-    String str2 = df2.format(date1);\r
+//    String str1 = df1.format(date1);\r
+//    String str2 = df2.format(date1);\r
 \r
   }\r
 \r
@@ -81,5 +90,118 @@ public class TimeUtil {
     return dateStr;\r
   }\r
 \r
+  public  static boolean is24Hour(Context mContext){\r
+    return   DateFormat.is24HourFormat(mContext);\r
+  }\r
+\r
+  public  static void set24Hour(Context mContext,boolean _is24Hour){\r
+    if (_is24Hour) {\r
+      android.provider.Settings.System.putString(mContext.getContentResolver(),\r
+              android.provider.Settings.System.TIME_12_24, "24");\r
+    }else{\r
+      android.provider.Settings.System.putString(mContext.getContentResolver(),\r
+              android.provider.Settings.System.TIME_12_24, "12");\r
+    }\r
+  }\r
+\r
+  public static boolean isTimeZoneAuto(Context mContext){\r
+    try {\r
+      return  android.provider.Settings.Global.getInt(mContext.getContentResolver(),\r
+              android.provider.Settings.Global.AUTO_TIME_ZONE) > 0;\r
+    } catch (Settings.SettingNotFoundException e) {\r
+      e.printStackTrace();\r
+      return false;\r
+    }\r
+  }\r
+  public static void setAutoTimeZone(Context mContext,int checked){\r
+    android.provider.Settings.Global.putInt(mContext.getContentResolver(),\r
+            android.provider.Settings.Global.AUTO_TIME_ZONE, checked);\r
+  }\r
+\r
+  public static boolean isDateTimeAuto(Context mContext){\r
+    try {\r
+      return android.provider.Settings.Global.getInt(mContext.getContentResolver(),\r
+              android.provider.Settings.Global.AUTO_TIME) > 0;\r
+    } catch (Settings.SettingNotFoundException e) {\r
+      e.printStackTrace();\r
+      return false;\r
+    }\r
+  }\r
+\r
+  public static void setAutoDateTime(Context mContext,int checked){\r
+    android.provider.Settings.Global.putInt(mContext.getContentResolver(),\r
+            android.provider.Settings.Global.AUTO_TIME, checked);\r
+  }\r
+\r
+\r
+  public static void setSysDateTime(Context mContext,Date datetime,int timezone){\r
+\r
+\r
+    String timezone_name="";\r
+    if(timezone>0) {\r
+      timezone_name=String.format("GMT+%1$02d:00", Math.abs(timezone));\r
+\r
+    }else{\r
+      timezone_name=String.format("GMT-%1$02d:00", Math.abs(timezone));\r
+    }\r
+     TimeZone tz = TimeZone.getTimeZone(timezone_name);\r
+    ICLogger.i("====set timezone "+tz.getDisplayName());\r
+    Calendar c = Calendar.getInstance();\r
+    c.setTime(datetime);\r
+    if (is24Hour(mContext)){\r
+      c.add(Calendar.HOUR_OF_DAY, timezone);//24小时制\r
+    }else{\r
+      c.add(Calendar.HOUR, timezone);//12小时制\r
+    }\r
+    c.setTimeZone(tz);\r
+    long when = c.getTimeInMillis();\r
+    ICLogger.i("====set time "+c.toString());\r
+    if(when / 1000 < Integer.MAX_VALUE){\r
+      ((AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE)).setTime(when);\r
+    }\r
+  }\r
+\r
+  public static void setSysTime(Context mContext,int hour,int minute,int secounds){\r
+    Calendar c = Calendar.getInstance();\r
+    c.set(Calendar.HOUR_OF_DAY, hour);\r
+    c.set(Calendar.MINUTE, minute);\r
+    c.set(Calendar.SECOND, secounds);\r
+    c.set(Calendar.MILLISECOND, 0);\r
+\r
+    long when = c.getTimeInMillis();\r
+    ICLogger.i("====set time "+c.toString());\r
+    if(when / 1000 < Integer.MAX_VALUE){\r
+      ((AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE)).setTime(when);\r
+    }\r
+  }\r
+\r
+  // 获取 “GMT+08:00”对应的时区\r
+//  TimeZone china = TimeZone.getTimeZone("GMT+:08:00");\r
+  // 获取 “中国/重庆”对应的时区\r
+//  TimeZone chongqing = TimeZone.getTimeZone("Asia/Chongqing");\r
+\r
+  public static void setTimeZone(String timeZone){\r
+    final Calendar now = Calendar.getInstance();\r
+    TimeZone tz = TimeZone.getTimeZone(timeZone);\r
+    now.setTimeZone(tz);\r
+  }\r
+  public static void setTimeZone(int timeZone){\r
+    final Calendar now = Calendar.getInstance();\r
+    timeZone--;\r
+    String timezone_name="";\r
+    if(timeZone>0) {\r
+      timezone_name=String.format("GMT+%1$02d:00", Math.abs(timeZone));\r
+\r
+    }else{\r
+      timezone_name=String.format("GMT-%1$02d:00", Math.abs(timeZone));\r
+    }\r
+    ICLogger.i("====set timezone "+timezone_name);\r
+    TimeZone tz = TimeZone.getTimeZone(timezone_name);\r
+    now.setTimeZone(tz);\r
+    TimeZone.setDefault(tz);\r
+  }\r
+  public static String getDefaultTimeZone(){\r
+    return TimeZone.getDefault().getDisplayName();\r
+  }\r
 }\r
 \r
index 8cfd2d3..6daf2f5 100644 (file)
@@ -228,7 +228,8 @@ public class Util {
     Class clazz = null;\r
     try {\r
       clazz = Class.forName("android.os.SystemProperties");\r
-      str = (String)clazz.getMethod("get", new Class[] { String.class }).invoke(clazz, new Object[] { prop });\r
+      Method get=clazz.getMethod("get", new Class[] { String.class });\r
+      str = (String)get.invoke(clazz, new Object[] { prop });\r
     } catch (Exception e) {\r
       e.printStackTrace();\r
     }\r
@@ -242,9 +243,9 @@ public class Util {
 \r
       Class<?> c = Class.forName("android.os.SystemProperties");\r
 \r
-      Method get = c.getMethod("set", String.class, String.class );\r
+      Method set = c.getMethod("set", String.class, String.class );\r
 \r
-      get.invoke(c, key, value );\r
+      set.invoke(c, key, value );\r
 \r
     } catch (Exception e) {\r
 \r