From: snickersun Date: Sun, 9 Feb 2020 16:08:02 +0000 (+0800) Subject: 1、修复Deliver.SaveQueue 在UI测试按钮,重启服务造成crash问题 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=271e0cd5959cbab60daf41bff12a1c347e729130;p=icsupport.git 1、修复Deliver.SaveQueue 在UI测试按钮,重启服务造成crash问题 2、修改UI,增加显示SIM卡状态,网络类型,信号强度,电池电量信息。 3、修复打开wifi后,Wifi总是被关闭问题 --- diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index c83f4c48..1fd094ed 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -108,23 +108,27 @@ public class CoreService extends Service { public String getServerAlive(){ int ppg=ICJniUtils.getPPG(); + SimSignalUtil sim=SimSignalUtil.getInstance(this); return new StringBuilder() .append(TimeUtil.getSystemTime3()) - .append("\n ppgExist ").append(ICJniUtils.isPPGavailable()) - .append(", Started ").append(ICJniUtils.isPPGStarted()) - .append(",weared ").append(ICJniUtils.isWeared()) - .append(",ppg ").append(ppg) - .append(",bph ").append(ICJniUtils.getHighBloodPressure()) - .append(",bpl ").append(ICJniUtils.getLowBloodPressure()) + .append(SimSignalUtil.hasSimCard(this)?" SIM ":" NoSIM ") + .append(sim.getNetworkType()==SimSignalUtil.IS_2G?"2G":(sim.getNetworkType()==SimSignalUtil.IS_3G)?"3G":(sim.getNetworkType()==SimSignalUtil.IS_4G?"4G":"unknown")) + .append(" ").append(runtime.getSignalStrength()) .append("\n Connecttion ").append(this.connection.isServerConnected()) .append(" KeepAlive ").append(KeepAlive.isConnected) .append("\n ServerConnected is ").append(runtime.isServerProtocolConnected()) - .append(" \n StepCount ").append(runtime.getTotalStepCount()) + .append(" \n Bat ").append(runtime.getBattery()) + .append(" StepCount ").append(runtime.getTotalStepCount()) .append( "\n Working Mode ").append(runtime.getLocationInstance().getWorkingMod()) .append(" \n Location Cycle ").append(runtime.getLocationInstance().getLocation_cycle()) .append(" \n LocationType ").append(runtime.getLocationInstance().getLocationType()) .append(" at ").append(runtime.getLocationInstance().getLocationTime()) .append(" \n PPGTestCycle ").append(runtime.getPpgTestCycle()) + .append("\n PPGStarted ").append(ICJniUtils.isPPGStarted()) + .append(",weared ").append(ICJniUtils.isWeared()) + .append(",ppg ").append(ppg) + .append(",bph ").append(ICJniUtils.getHighBloodPressure()) + .append(",bpl ").append(ICJniUtils.getLowBloodPressure()) .toString(); } @@ -240,30 +244,32 @@ public class CoreService extends Service { private BroadcastReceiver screenOnReceiver = new BroadcastReceiver() { public void onReceive(Context param1Context, Intent param1Intent) { + if ("android.intent.action.SCREEN_ON".equals(param1Intent.getAction())) { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("screen on wake is_wifi_network_ok="); - stringBuilder.append(is_wifi_network_ok); - Logger.i(stringBuilder.toString()); - if (is_in_sleep_mode) { + StringBuilder var3 = new StringBuilder(); + var3.append("screen on wake is_wifi_network_ok="); + var3.append(CoreService.is_wifi_network_ok); + Logger.i(var3.toString()); + if (CoreService.is_in_sleep_mode) { /*屏幕亮起时,如果在sleep模式,则唤醒各个进程*/ - CoreService.is_in_sleep_mode=false; - CoreService.is_allowed_in_sleep_mode=0; - if (CoreService.this.mKeepAlive != null) + CoreService.is_in_sleep_mode = false; + CoreService.is_allowed_in_sleep_mode = 0; + if (CoreService.this.mKeepAlive != null) { CoreService.this.mKeepAlive.setSleepMode(false); + } + CoreService.this.wakeUpFromSleep(); } - if (is_wifi_network_ok) { - /*屏幕亮起时,如果wifi开启,则开启wifi*/ - CoreService.is_in_sleep_mode=false; - Util.turnOnWifiForConnect((CoreService.this.runtime.getContextProxy()).context, CoreService.this.runtime); + if (CoreService.is_wifi_network_ok) { + CoreService.is_wifi_network_ok = false; + /*屏幕亮起时,如果wifi用户设置是开启的,则开启wifi*/ + Util.turnOnWifiForConnect(CoreService.this.runtime.getContextProxy().context, CoreService.this.runtime); } - } else if ("android.intent.action.SCREEN_OFF".equals(param1Intent.getAction()) && Util.isWifiIsOpen((CoreService.this.runtime.getContextProxy()).context, CoreService.this.runtime)) { - - CoreService.is_in_sleep_mode=true; - Util.turnOffWifiForSleep((CoreService.this.runtime.getContextProxy()).context, CoreService.this.runtime); + } else if ("android.intent.action.SCREEN_OFF".equals(param1Intent.getAction()) && Util.isWifiIsOpen(CoreService.this.runtime.getContextProxy().context, CoreService.this.runtime)) { + CoreService.is_wifi_network_ok = true; + Util.turnOffWifiForSleep(CoreService.this.runtime.getContextProxy().context, CoreService.this.runtime); } } }; @@ -311,6 +317,10 @@ public class CoreService extends Service { private void loadStepCount() { int i = SharPreferenceUtil.getPrefInt(this, KEY_STEP_COUNT, 0); int j = SharPreferenceUtil.getPrefInt(this, KEY_SAVE_STEP_COUNT, 0); + if ( ICJniUtils.isPedometerEnabled() == 0)ICJniUtils.enablePedometer(); + if (ICJniUtils.getStepCount()>i){ + i=ICJniUtils.getStepCount(); + } this.runtime.setSaveStepCount(j); this.runtime.setTotalStepCount(i); } @@ -348,7 +358,7 @@ public class CoreService extends Service { private void setWeatherAlarm() { /*每天6点20分左右 更新一次 weather*/ - AlarmHelper.setTimeAlarm(this, 6, (new Random()).nextInt(40) + 20, WEATHER_ALARM); +// AlarmHelper.setTimeAlarm(this, 6, (new Random()).nextInt(40) + 20, WEATHER_ALARM); } private void checkconnection(){ @@ -468,6 +478,11 @@ public class CoreService extends Service { batteryUtil.registerBroadReceiver(); + //保证发送心跳时提前获取BatLevel数据 + int batlevel=batteryUtil.getBatteryLevel(this); + runtime.setBattery(String.format("%03d",batlevel)); + Logger.i("Battery get from api "+batlevel); + //设置计步清零时间。 setCleanStepCountAlarm(); @@ -524,7 +539,7 @@ public class CoreService extends Service { } //这里就是为了省电,如果wifi开启,且屏幕关闭,则wifi也关闭 if (Util.isConnectWifi((this.runtime.getContextProxy()).context) && !screenon) { - is_wifi_network_ok = true; + is_wifi_network_ok = true; //如果wifi开启的,则记录wifi状态为开启,以后屏幕开启时,再根据此变量决定是否打开wifi Util.turnOffWifiForSleep((this.runtime.getContextProxy()).context, this.runtime); } setAlarm(alarmCycle); diff --git a/app/src/main/java/com/enqualcomm/support/MainActivity.java b/app/src/main/java/com/enqualcomm/support/MainActivity.java index 9fb2dfbc..33e6466a 100644 --- a/app/src/main/java/com/enqualcomm/support/MainActivity.java +++ b/app/src/main/java/com/enqualcomm/support/MainActivity.java @@ -67,13 +67,14 @@ public class MainActivity extends AppCompatActivity { } }); ToggleButton tbtnblood = (ToggleButton)findViewById(R.id.toggleButton2); - tbtnblood.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - if (b) ICJniUtils.enablePPG(); - else ICJniUtils.disablePPG(); - } - }); + tbtnblood.setVisibility(View.GONE); +// tbtnblood.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { +// @Override +// public void onCheckedChanged(CompoundButton compoundButton, boolean b) { +// if (b) ICJniUtils.enablePPG(); +// else ICJniUtils.disablePPG(); +// } +// }); startService(new Intent(this,CoreService.class));// protocol service diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index a0baddde..989af5c2 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -237,6 +237,7 @@ public class Deliver extends AbstractConnectionService { lock.unlock(); return; } finally { + if (lock!=null &&lock.isLocked()) lock.unlock(); } } diff --git a/app/src/main/java/com/enqualcomm/support/utils/BatteryUtil.java b/app/src/main/java/com/enqualcomm/support/utils/BatteryUtil.java index 7303f785..c4959490 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/BatteryUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/BatteryUtil.java @@ -3,12 +3,17 @@ package com.enqualcomm.support.utils; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; +import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentFilter; +import android.os.BatteryManager; +import android.os.Build; import com.enqualcomm.support.Config; import com.enqualcomm.support.bean.Runtime; +import static android.content.Context.BATTERY_SERVICE; + public class BatteryUtil { private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver() { public void onReceive(Context param1Context, Intent param1Intent) { @@ -20,7 +25,7 @@ public class BatteryUtil { BatteryUtil.this.mRuntime.setBatterychanging(false); } int i = param1Intent.getIntExtra("level", 0) * 100 / param1Intent.getIntExtra("scale", 100); - + Logger.i("BatteryLevel "+i); if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(),"Battery","BatteryLevel "+i); if (i >= 100) { Runtime runtime = BatteryUtil.this.mRuntime; @@ -99,7 +104,18 @@ public class BatteryUtil { intentFilter.addAction("android.intent.action.BATTERY_LOW"); (this.mRuntime.getContextProxy()).context.registerReceiver(this.batteryChangedReceiver, intentFilter); } - + + public int getBatteryLevel(Context context){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + BatteryManager batteryManager = (BatteryManager)context.getSystemService(BATTERY_SERVICE); + return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); + } else { + Intent intent = new ContextWrapper(context.getApplicationContext()). + registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + return (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) / + intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); + } + } public void unregisterBroadReceiver() { (this.mRuntime.getContextProxy()).context.unregisterReceiver(this.batteryChangedReceiver); } } diff --git a/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java b/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java index 640f45d8..14d95f17 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java @@ -60,7 +60,25 @@ public class SimSignalUtil { stringBuilder.append(paramInt2); Logger.i(stringBuilder.toString()); } - + + public static boolean hasSimCard(Context context) { + + TelephonyManager telMgr = (TelephonyManager) + context.getSystemService(Context.TELEPHONY_SERVICE); + int simState = telMgr.getSimState(); + boolean result = true; + switch (simState) { + case TelephonyManager.SIM_STATE_ABSENT: + result = false; // 没有SIM卡 + break; + case TelephonyManager.SIM_STATE_UNKNOWN: + result = false; + break; + } + Logger.i( result ? "有SIM卡" : "无SIM卡"); + return result; + } + public void changeNetWorkType(String paramString) { Intent intent = new Intent("android.intent.action.NETWORK_MODE_CTRL"); intent.putExtra("mode", paramString); 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 057e0d8f..a539735a 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/Util.java +++ b/app/src/main/java/com/enqualcomm/support/utils/Util.java @@ -23,6 +23,7 @@ import java.net.InetAddress; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.Iterator; import java.util.UUID; import okio.BufferedSink; @@ -33,6 +34,7 @@ import com.enqualcomm.support.bean.VoiceContent; import com.enqualcomm.support.bean.voicePacket; import static android.content.Context.CONNECTIVITY_SERVICE; +import static android.content.Context.WIFI_SERVICE; public class Util { public static Charset UTF_16 = Charset.forName("UTF-16LE"); @@ -164,129 +166,179 @@ public class Util { } return str; } - public static WifiConfiguration GetconfigWifiInfo(Context paramContext, String paramString1, String paramString2, String paramString3) { - WifiConfiguration wificonfig=new WifiConfiguration(); - return wificonfig; - } - public static String byte2hex(byte[] paramArrayOfByte) { - if (paramArrayOfByte == null) - throw new IllegalArgumentException("Argument b ( byte array ) is null! "); - String str = ""; - for (byte b = 0; b < paramArrayOfByte.length; b++) { - String str1 = Integer.toHexString(paramArrayOfByte[b] & 0xFF); - if (str1.length() == 1) { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(str); - stringBuilder.append("0"); - stringBuilder.append(str1); - str = stringBuilder.toString(); - } else { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(str); - stringBuilder.append(str1); - str = stringBuilder.toString(); - } - } - return str.toUpperCase(); + public static WifiConfiguration GetconfigWifiInfo(Context context, String var1, String var2, String var3) { + WifiConfiguration var8; + label36: { + WifiManager var7 = (WifiManager)context.getSystemService(WIFI_SERVICE); + if (var7 != null) { + Iterator var4 = var7.getConfiguredNetworks().iterator(); + + while(var4.hasNext()) { + var8 = (WifiConfiguration)var4.next(); + if (var8 != null) { + String var5 = var8.SSID; + StringBuilder var6 = new StringBuilder(); + var6.append("\""); + var6.append(var1); + var6.append("\""); + if (var5.equals(var6.toString())) { + break label36; + } + } + } + } + + var8 = null; + } + + WifiConfiguration var12 = var8; + if (var8 == null) { + var12 = new WifiConfiguration(); + } + + var12.allowedAuthAlgorithms.clear(); + var12.allowedGroupCiphers.clear(); + var12.allowedKeyManagement.clear(); + var12.allowedPairwiseCiphers.clear(); + var12.allowedProtocols.clear(); + StringBuilder var10 = new StringBuilder(); + var10.append("\""); + var10.append(var1); + var10.append("\""); + var12.SSID = var10.toString(); + if ("none".equals(var3)) { + var12.allowedKeyManagement.set(0); + } else if ("wep".equals(var3)) { + var12.hiddenSSID = true; + String[] var11 = var12.wepKeys; + StringBuilder var9 = new StringBuilder(); + var9.append("\""); + var9.append(var2); + var9.append("\""); + var11[0] = var9.toString(); + var12.allowedAuthAlgorithms.set(1); + var12.allowedGroupCiphers.set(3); + var12.allowedGroupCiphers.set(2); + var12.allowedGroupCiphers.set(0); + var12.allowedGroupCiphers.set(1); + var12.allowedKeyManagement.set(0); + var12.wepTxKeyIndex = 0; + } else if ("psk".equals(var3)) { + var10 = new StringBuilder(); + var10.append("\""); + var10.append(var2); + var10.append("\""); + var12.preSharedKey = var10.toString(); + var12.hiddenSSID = true; + var12.allowedAuthAlgorithms.set(0); + var12.allowedGroupCiphers.set(2); + var12.allowedKeyManagement.set(1); + var12.allowedPairwiseCiphers.set(1); + var12.allowedGroupCiphers.set(3); + var12.allowedPairwiseCiphers.set(2); + var12.status = 2; + } + + return var12; } - - public static boolean checkNetwork(Context paramContext) { - NetworkInfo networkInfo = ((ConnectivityManager)paramContext.getSystemService(CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); - return (networkInfo != null && networkInfo.isConnected()); + + public static String byte2hex(byte[] var0) { + if (var0 == null) { + throw new IllegalArgumentException("Argument b ( byte array ) is null! "); + } else { + String var1 = ""; + + for(int var2 = 0; var2 < var0.length; ++var2) { + String var3 = Integer.toHexString(var0[var2] & 255); + StringBuilder var4; + if (var3.length() == 1) { + var4 = new StringBuilder(); + var4.append(var1); + var4.append("0"); + var4.append(var3); + var1 = var4.toString(); + } else { + var4 = new StringBuilder(); + var4.append(var1); + var4.append(var3); + var1 = var4.toString(); + } + } + + return var1.toUpperCase(); + } } - - public static Method connectWifiByReflectMethod(Context paramContext, int paramInt) { - Method method; - WifiManager wifiManager = (WifiManager)paramContext.getSystemService(Context.WIFI_SERVICE); -// if (Build.VERSION.SDK_INT >= 17) { -// Logger.i("connectWifiByReflectMethod road 1"); -// Method[] arrayOfMethod = wifiManager.getClass().getDeclaredMethods(); -// int i = arrayOfMethod.length; -// paramContext = null; -// byte b = 0; -// while (b < i) { -// Method method3 = arrayOfMethod[b]; -// Method method2 = paramContext; -// if ("connect".equalsIgnoreCase(method3.getName())) { -// Class[] arrayOfClass = method3.getParameterTypes(); -// method2 = paramContext; -// if (arrayOfClass != null) { -// method2 = paramContext; -// if (arrayOfClass.length > 0) { -// method2 = paramContext; -// if ("int".equalsIgnoreCase(arrayOfClass[0].getName())) -// method2 = method3; -// } -// } -// } -// b++; -// method1 = method2; -// } -// method = method1; -// if (method1 != null) -// try { -// method1.invoke(wifiManager, new Object[] { Integer.valueOf(paramInt), null }); -// return method1; -// } catch (Exception method1) { -// method1.printStackTrace(); -// StringBuilder stringBuilder = new StringBuilder(); -// stringBuilder.append("connectWifiByReflectMethod Android "); -// stringBuilder.append(Build.VERSION.SDK_INT); -// stringBuilder.append(" error!"); -// Logger.i(stringBuilder.toString()); -// return null; -// } -// } - return null; + + public static boolean checkNetwork(Context var0) { + NetworkInfo var2 = ((ConnectivityManager)var0.getSystemService(CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); + boolean var1; + if (var2 != null && var2.isConnected()) { + var1 = true; + } else { + var1 = false; + } + + return var1; } - - public static String copyFile(String paramString, File paramFile) { -// file = new File(paramString); -// StringBuilder stringBuilder = new StringBuilder(); -// stringBuilder.append(UUID.randomUUID().toString()); -// stringBuilder.append("_"); -// stringBuilder.append(file.getName()); -// String str = stringBuilder.toString(); -// paramFile = makeDir(paramFile, str); -// try { -// paramFile = new File(paramFile, str); -// BufferedSink bufferedSink = Okio.buffer(Okio.sink(paramFile)); -// Source source = Okio.source(file); -// bufferedSink.writeAll(source); -// bufferedSink.close(); -// source.close(); -// return paramFile.getAbsolutePath(); -// } catch (IOException file) { -// file.printStackTrace(); -// return null; -// } - return null; + + public static Method connectWifiByReflectMethod(Context var0, int var1) { + WifiManager var2 = (WifiManager)var0.getSystemService(WIFI_SERVICE); + Method[] var3; + int var4; + int var5; + Method var6; + Method var7; + Class[] var8; + Method var11; + StringBuilder var12; + + Logger.i("connectWifiByReflectMethod road 1"); + var3 = var2.getClass().getDeclaredMethods(); + var4 = var3.length; + var11 = null; + + for(var5 = 0; var5 < var4; var11 = var7) { + var6 = var3[var5]; + var7 = var11; + if ("connect".equalsIgnoreCase(var6.getName())) { + var8 = var6.getParameterTypes(); + var7 = var11; + if (var8 != null) { + var7 = var11; + if (var8.length > 0) { + var7 = var11; + if ("int".equalsIgnoreCase(var8[0].getName())) { + var7 = var6; + } + } + } + } + + ++var5; + } + + var7 = var11; + if (var11 != null) { + try { + var11.invoke(var2, var1, null); + } catch (Exception var10) { + var10.printStackTrace(); + var12 = new StringBuilder(); + var12.append("connectWifiByReflectMethod Android "); + var12.append(Build.VERSION.SDK_INT); + var12.append(" error!"); + Logger.i(var12.toString()); + return null; + } + + var7 = var11; + } + + return var7; } - public static String cutFile(String paramString, File paramFile) { -// file = new File(paramString); -// StringBuilder stringBuilder = new StringBuilder(); -// stringBuilder.append(UUID.randomUUID().toString()); -// stringBuilder.append("_"); -// stringBuilder.append(file.getName()); -// String str = stringBuilder.toString(); -// paramFile = makeDir(paramFile, str); -// try { -// paramFile = new File(paramFile, str); -// BufferedSink bufferedSink = Okio.buffer(Okio.sink(paramFile)); -// Source source = Okio.source(file); -// bufferedSink.writeAll(source); -// bufferedSink.close(); -// source.close(); -// file.delete(); -// return paramFile.getAbsolutePath(); -// } catch (IOException file) { -// file.printStackTrace(); -// return null; -// } - return null; - } + public static int getDuration(String amrfilePath) { @@ -314,12 +366,12 @@ public class Util { public static boolean isConnectWifi(Context paramContext) { ConnectivityManager connectivityManager = (ConnectivityManager)paramContext.getSystemService(CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); - NetworkInfo.State state = connectivityManager.getNetworkInfo(1).getState(); + NetworkInfo.State state = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); return (networkInfo != null && networkInfo.isAvailable() && state == NetworkInfo.State.CONNECTED); } public static boolean isWifiInIdle(Context paramContext) { - NetworkInfo.State state = ((ConnectivityManager)paramContext.getSystemService(CONNECTIVITY_SERVICE)).getNetworkInfo(1).getState(); + NetworkInfo.State state = ((ConnectivityManager)paramContext.getSystemService(CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("yls wifi="); stringBuilder.append(state);