From: snickersun Date: Sat, 9 May 2020 04:21:03 +0000 (+0800) Subject: 1、 persist.sys.NoLocationCycle 通过此环境属性 控制是否执行周期定位功能。(增加一种只有手动获取定位的省电模式) X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=bdcdf0c06796c6bebe09b5ce060946fee72e4d12;p=icsupport.git 1、 persist.sys.NoLocationCycle 通过此环境属性 控制是否执行周期定位功能。(增加一种只有手动获取定位的省电模式) 2、 根据登录指令AP00的返回时间和时区 设置系统时间和周期。 3、 添加sms指令 #nolocationcycle#=current#, #nolocationcycle#=true#, #nolocationcycle#=false# 4、sms cmd 解析前去掉头尾的空格,以便加强兼容性。 --- diff --git a/app/src/main/java/com/enqualcomm/support/Config.java b/app/src/main/java/com/enqualcomm/support/Config.java index 7d0f7a6f..6d77af7a 100644 --- a/app/src/main/java/com/enqualcomm/support/Config.java +++ b/app/src/main/java/com/enqualcomm/support/Config.java @@ -9,6 +9,7 @@ import com.enqualcomm.support.bean.Runtime; import com.enqualcomm.support.utils.ICLogger; import com.enqualcomm.support.utils.SharPreferenceUtil; import com.enqualcomm.support.utils.TimeUtil; +import com.enqualcomm.support.utils.Util; import org.json.JSONException; import org.json.JSONStringer; @@ -294,5 +295,16 @@ public class Config { ICLogger.i("Current BootDate="+currentDate+", Last BootDate="+lastDate+", ret="+ret); return ret; } + + public static boolean noLocationCycle=getNoLocationCycleFlag(); + public static boolean getNoLocationCycleFlag(){ + String tmp=Util.getSystemProperties("persist.sys.NoLocationCycle"); + boolean ret=false; + if (tmp.equals("true")) + ret=true; + + noLocationCycle=ret; + return ret; + } } diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index ad69682c..b7bc09f6 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -828,7 +828,8 @@ public class CoreService extends Service { break; } - AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context,cycle, ACTION_LOCATION_ALARM); + if (Config.noLocationCycle==false) + AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context,cycle, ACTION_LOCATION_ALARM); sb.append(" setLocationAlarm "+ACTION_LOCATION_ALARM+" mod "+mod+", cycle in Seconds "+cycle); ICLogger.i(sb.toString()); if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString()); @@ -892,7 +893,7 @@ public class CoreService extends Service { } } - private static final String TAG = "ICSrv." + CoreService.class.getSimpleName(); + private static final String TAG = "ICSrv." + CoreService.class.getSimpleName(); private ScheduledThreadPoolExecutor mTimer_retry_connect=null; diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index 297e77f6..e9ad9545 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -181,7 +181,7 @@ public class ICSmsManager { if (ENCRYPED_HEADER.equals(Config.DefaultSMSPassword)) { ENCRYPED_HEADER = ""; } - + sms=sms.trim(); if (sms.equals(ENCRYPED_HEADER + "#logctl#=upload,all")){ sms=ENCRYPED_HEADER+"#logctl#=upload,SDLog:Android/ic"; } @@ -758,6 +758,30 @@ public class ICSmsManager { broadCastStartFotaUpdate(mContext); sendSMS(phonenumber, "start fota update !"); + }else if (sms.startsWith(ENCRYPED_HEADER+"#nolocationcycle#=")&& sms.endsWith("#")) { + String tmp[] = sms.split("="); + if (tmp.length == 2) { + String strtmp=tmp[1].replace("#",""); + if (strtmp.equalsIgnoreCase("false")){ + Util.setSystemProperties("persist.sys.NoLocationCycle","false"); + Config.getNoLocationCycleFlag(); + sendSMS(phonenumber, "set noLocationCycle false! and trigger one Location"); + LocationClient locationClient=LocationClient.getInstance(); + if (locationClient!=null){ + locationClient.triggerLocationProcess(); + } + }else if (strtmp.equalsIgnoreCase("true")){ + Util.setSystemProperties("persist.sys.NoLocationCycle","true"); + Config.getNoLocationCycleFlag(); + sendSMS(phonenumber, "set noLocationCycle true!"); + }else if (strtmp.equalsIgnoreCase("current")){ + sendSMS(phonenumber, "current noLocationCycle "+Config.getNoLocationCycleFlag()+"!"); + }else { + sendSMS(phonenumber, " nolocationcycle cmd Format error!"); + } + } else { + sendSMS(phonenumber, " nolocationcycle cmd Format error!"); + } }else { return false; } diff --git a/app/src/main/java/com/enqualcomm/support/NMEAListener.java b/app/src/main/java/com/enqualcomm/support/NMEAListener.java index d232433f..ab635def 100644 --- a/app/src/main/java/com/enqualcomm/support/NMEAListener.java +++ b/app/src/main/java/com/enqualcomm/support/NMEAListener.java @@ -77,7 +77,8 @@ public class NMEAListener implements NmeaListener, LocationListener { public void setNoStop(boolean nostop) { - noStop = nostop; + if (Config.noLocationCycle==false) + noStop = nostop; ICLogger.i("setNoStop " + nostop); if (noStop == false) { switch (runtime.getLocationInstance().getWorkingMod()) { diff --git a/app/src/main/java/com/enqualcomm/support/adapter/protocolAPIHelper.java b/app/src/main/java/com/enqualcomm/support/adapter/protocolAPIHelper.java index bbb80459..5c79bc20 100644 --- a/app/src/main/java/com/enqualcomm/support/adapter/protocolAPIHelper.java +++ b/app/src/main/java/com/enqualcomm/support/adapter/protocolAPIHelper.java @@ -31,7 +31,9 @@ import com.enqualcomm.support.utils.TimeUtil; import com.enqualcomm.support.utils.Util; import java.io.File; +import java.sql.Time; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import static com.enqualcomm.support.Constants.ACTION_EQC_ALARM; @@ -310,7 +312,7 @@ public class protocolAPIHelper { } //处理 登录 BP00 - public void handleBP00(String cmd){ + public void handleBP00(Runtime runtime,String cmd){ String[] msg=cmd.split(CMDSPLIT); // get Msg :IWBP00,20191229171933,8# (size)24 // 12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 , IWBP00,20191229171933,8 @@ -318,6 +320,22 @@ public class protocolAPIHelper { if (msg.length>=3) { log("handleBP00", "Set Datetime " + msg[1]); log("handleBP00", "Set TimeZone " + msg[2]); + + Date datetime=TimeUtil.parseDatetiime(msg[1]); + int timezone=Integer.parseInt(msg[2]); + if (datetime!=null){ + ICLogger.i("==="+TimeUtil.getDefaultTimeZone()); + TimeUtil.setTimeZone(timezone); + + + ICLogger.i("==="+TimeUtil.getDefaultTimeZone()); + TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone); + ICLogger.i("==="+TimeUtil.getDefaultTimeZone()); + + } +// Set Datetime 20200505112734 +// Set TimeZone 8 + }else{ log("handleBP00","format Error"); } diff --git a/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java b/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java index 38b56fa1..83bba988 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java +++ b/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java @@ -55,7 +55,7 @@ public class NettyConnection implements Connection { if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd); switch (type){ case BP00: - API.handleBP00(cmd); + API.handleBP00(runtime,cmd); ICLogger.i("服务器收到登录包AP00"); DeliverCMDMessageToSystem("BP00",cmd);//通知下面线程状态变化 break; diff --git a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java index 0571dc8a..db869198 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java @@ -1,10 +1,16 @@ package com.enqualcomm.support.utils; +import android.app.AlarmManager; +import android.content.Context; +import android.provider.Settings; +import android.text.format.DateFormat; + import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; +import java.util.TimeZone; public class TimeUtil { public static String getLocalTime() { return getLocalTime(System.currentTimeMillis()); } @@ -33,19 +39,22 @@ public class TimeUtil { - public static void parseDatetiime(String datetimeStr){ + public static Date parseDatetiime(String datetimeStr){ SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH);//输入的被转化的时间格式 SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//需要转化成的时间格式 SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + SimpleDateFormat df3 = new SimpleDateFormat("yyyyMMddHHmmss"); Date date1 = null; try { - date1 = dff.parse(datetimeStr); + date1 = df3.parse(datetimeStr); + return date1; } catch (ParseException e) { e.printStackTrace(); + return null; } - String str1 = df1.format(date1); - String str2 = df2.format(date1); +// String str1 = df1.format(date1); +// String str2 = df2.format(date1); } @@ -81,5 +90,118 @@ public class TimeUtil { return dateStr; } + public static boolean is24Hour(Context mContext){ + return DateFormat.is24HourFormat(mContext); + } + + public static void set24Hour(Context mContext,boolean _is24Hour){ + if (_is24Hour) { + android.provider.Settings.System.putString(mContext.getContentResolver(), + android.provider.Settings.System.TIME_12_24, "24"); + }else{ + android.provider.Settings.System.putString(mContext.getContentResolver(), + android.provider.Settings.System.TIME_12_24, "12"); + } + } + + public static boolean isTimeZoneAuto(Context mContext){ + try { + return android.provider.Settings.Global.getInt(mContext.getContentResolver(), + android.provider.Settings.Global.AUTO_TIME_ZONE) > 0; + } catch (Settings.SettingNotFoundException e) { + e.printStackTrace(); + return false; + } + } + public static void setAutoTimeZone(Context mContext,int checked){ + android.provider.Settings.Global.putInt(mContext.getContentResolver(), + android.provider.Settings.Global.AUTO_TIME_ZONE, checked); + } + + public static boolean isDateTimeAuto(Context mContext){ + try { + return android.provider.Settings.Global.getInt(mContext.getContentResolver(), + android.provider.Settings.Global.AUTO_TIME) > 0; + } catch (Settings.SettingNotFoundException e) { + e.printStackTrace(); + return false; + } + } + + public static void setAutoDateTime(Context mContext,int checked){ + android.provider.Settings.Global.putInt(mContext.getContentResolver(), + android.provider.Settings.Global.AUTO_TIME, checked); + } + + + public static void setSysDateTime(Context mContext,Date datetime,int timezone){ + + + String timezone_name=""; + if(timezone>0) { + timezone_name=String.format("GMT+%1$02d:00", Math.abs(timezone)); + + }else{ + timezone_name=String.format("GMT-%1$02d:00", Math.abs(timezone)); + } + TimeZone tz = TimeZone.getTimeZone(timezone_name); + ICLogger.i("====set timezone "+tz.getDisplayName()); + Calendar c = Calendar.getInstance(); + c.setTime(datetime); + if (is24Hour(mContext)){ + c.add(Calendar.HOUR_OF_DAY, timezone);//24小时制 + }else{ + c.add(Calendar.HOUR, timezone);//12小时制 + } + c.setTimeZone(tz); + long when = c.getTimeInMillis(); + ICLogger.i("====set time "+c.toString()); + if(when / 1000 < Integer.MAX_VALUE){ + ((AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE)).setTime(when); + } + } + + public static void setSysTime(Context mContext,int hour,int minute,int secounds){ + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, hour); + c.set(Calendar.MINUTE, minute); + c.set(Calendar.SECOND, secounds); + c.set(Calendar.MILLISECOND, 0); + + long when = c.getTimeInMillis(); + ICLogger.i("====set time "+c.toString()); + if(when / 1000 < Integer.MAX_VALUE){ + ((AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE)).setTime(when); + } + } + + // 获取 “GMT+08:00”对应的时区 +// TimeZone china = TimeZone.getTimeZone("GMT+:08:00"); + // 获取 “中国/重庆”对应的时区 +// TimeZone chongqing = TimeZone.getTimeZone("Asia/Chongqing"); + + public static void setTimeZone(String timeZone){ + final Calendar now = Calendar.getInstance(); + TimeZone tz = TimeZone.getTimeZone(timeZone); + now.setTimeZone(tz); + } + public static void setTimeZone(int timeZone){ + final Calendar now = Calendar.getInstance(); + timeZone--; + String timezone_name=""; + if(timeZone>0) { + timezone_name=String.format("GMT+%1$02d:00", Math.abs(timeZone)); + + }else{ + timezone_name=String.format("GMT-%1$02d:00", Math.abs(timeZone)); + } + ICLogger.i("====set timezone "+timezone_name); + TimeZone tz = TimeZone.getTimeZone(timezone_name); + now.setTimeZone(tz); + TimeZone.setDefault(tz); + } + public static String getDefaultTimeZone(){ + return TimeZone.getDefault().getDisplayName(); + } } diff --git a/app/src/main/java/com/enqualcomm/support/utils/Util.java b/app/src/main/java/com/enqualcomm/support/utils/Util.java index 8cfd2d30..6daf2f52 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/Util.java +++ b/app/src/main/java/com/enqualcomm/support/utils/Util.java @@ -228,7 +228,8 @@ public class Util { Class clazz = null; try { clazz = Class.forName("android.os.SystemProperties"); - str = (String)clazz.getMethod("get", new Class[] { String.class }).invoke(clazz, new Object[] { prop }); + Method get=clazz.getMethod("get", new Class[] { String.class }); + str = (String)get.invoke(clazz, new Object[] { prop }); } catch (Exception e) { e.printStackTrace(); } @@ -242,9 +243,9 @@ public class Util { Class c = Class.forName("android.os.SystemProperties"); - Method get = c.getMethod("set", String.class, String.class ); + Method set = c.getMethod("set", String.class, String.class ); - get.invoke(c, key, value ); + set.invoke(c, key, value ); } catch (Exception e) {