From: TrillGates Date: Fri, 24 Sep 2021 06:57:55 +0000 (+0800) Subject: fixed s123 temperature UI. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=32ce343e866cbfcd9817ae3abadb5ee27c14c28b;p=icworkservice.git fixed s123 temperature UI. --- diff --git a/app/src/main/aidl/com/ic/work/IExInfoCallback.aidl b/app/src/main/aidl/com/ic/work/IExInfoCallback.aidl index 3a11009..b57f847 100644 --- a/app/src/main/aidl/com/ic/work/IExInfoCallback.aidl +++ b/app/src/main/aidl/com/ic/work/IExInfoCallback.aidl @@ -3,7 +3,7 @@ package com.ic.work; interface IExInfoCallback { //获取主板温度的回调方法 - void onBoardTemperatureLoaded(in float tempearture); + void onBoardTemperatureLoaded(in double tempearture); //高温警告的回调方法 - void onBoardTemperatureTooHigh(in float limit); + void onBoardTemperatureTooHigh(in double limit); } \ No newline at end of file diff --git a/app/src/main/aidl/com/ic/work/IExInfoService.aidl b/app/src/main/aidl/com/ic/work/IExInfoService.aidl index c01c34e..40c98e3 100644 --- a/app/src/main/aidl/com/ic/work/IExInfoService.aidl +++ b/app/src/main/aidl/com/ic/work/IExInfoService.aidl @@ -1,13 +1,21 @@ // IExInfoService.aidl package com.ic.work; +import com.ic.work.IExInfoCallback; + interface IExInfoService { //获取主板温度 - void getBoardTemperature(); + oneway void getBoardTemperature(); //设置主办温度的阀值和测试周期 //如果没有设置测试周期,越接近阀值温度,测试越频繁,离阀值温度越远 //测试不那么频繁 - void setBoardTempCheckCycle(in int second); + oneway void setBoardTempCheckCycle(in int second); //如果没有设置,默认是50度 - void setBoardTempTopLimit(in float temp); + oneway void setBoardTempTopLimit(in float temp); + //开启主板温度监听 + oneway void triggerBoardTempListener(in boolean isListener); + //注册接口 + oneway void registerCallback(in IExInfoCallback callback); + //取消接口注册 + oneway void unregisterCallback(in IExInfoCallback callback); } \ No newline at end of file diff --git a/app/src/main/java/com/ic/work/SensorDataService.java b/app/src/main/java/com/ic/work/SensorDataService.java index d9c98d0..68c5779 100644 --- a/app/src/main/java/com/ic/work/SensorDataService.java +++ b/app/src/main/java/com/ic/work/SensorDataService.java @@ -3,7 +3,9 @@ package com.ic.work; import android.app.Service; import android.content.ContentResolver; import android.content.ContentValues; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.Handler; @@ -23,10 +25,12 @@ import com.ic.work.event.TestTaskEvent; import com.ic.work.hardware.BloodInfoHelper; import com.ic.work.hardware.BloodSensorManager; import com.ic.work.hardware.TemperatureHelper; +import com.ic.work.utils.AlarmManagerUtil; import com.ic.work.utils.ICLogger; import com.ic.work.utils.ICWorkConstants; import com.ic.work.utils.IcLog; import com.ic.work.utils.IcSystemProperty; +import com.ic.work.utils.TemperatureUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -34,6 +38,7 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.concurrent.LinkedBlockingDeque; +import static com.ic.work.utils.ICWorkConstants.ACTION_EX_INFO; import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_AEE_HEART_RATE; import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_AEE_TEMPERATURE; import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_GET_HEART_RATE; @@ -71,6 +76,12 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp private PowerManager.WakeLock wakeLock; private HandlerThread handlerThread; private Handler handler; + private IExInfoCallback mExInfoCallback; + private SharedPreferences exInfoValueSp; + //主板温度检测周期 + private int mBoardCheckCycle; + //主板温度上限阀值 + private int mBoardTopLimit; // 有效值的最大出现次数 @Nullable @@ -84,11 +95,12 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp + packageName + " action name is == > " + action); if (ICWorkConstants.SensorServiceAction.ACTION_HEART_RATE.equals(action)) { return heartRateSensorService; - } - - if (ICWorkConstants.SensorServiceAction.ACTION_TEMPERATURE.equals(action)) { + } else if (ICWorkConstants.SensorServiceAction.ACTION_TEMPERATURE.equals(action)) { return tempSensorService; + } else if (ACTION_EX_INFO.equals(action)) { + return exInfoService; } + return null; } @@ -107,6 +119,9 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp handlerThread = new HandlerThread("ic:sensor:handler"); handlerThread.start(); handler = new Handler(handlerThread.getLooper()); + exInfoValueSp = getSharedPreferences("ex_info_value", Context.MODE_PRIVATE); + mBoardCheckCycle = exInfoValueSp.getInt("check_cycle", 60 * 5); + mBoardTopLimit = exInfoValueSp.getInt("top_limit", 50); } @@ -360,6 +375,68 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp return null; } + private final IExInfoService.Stub exInfoService = new IExInfoService.Stub() { + + @Override + public void getBoardTemperature() { + //获取主板的温度 + double boardTemperature = TemperatureUtil.getBoardTemperature(); + if (mExInfoCallback != null) { + try { + mExInfoCallback.onBoardTemperatureLoaded(boardTemperature); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + public void setBoardTempCheckCycle(int second) { + exInfoValueSp.edit().putInt("check_cycle", second).apply(); + //设置主板温度的测试周期 + mBoardCheckCycle = exInfoValueSp.getInt("check_cycle", 60 * 5); + } + + @Override + public void setBoardTempTopLimit(float temp) { + //设置温度的上限阀值 + exInfoValueSp.edit().putFloat("top_limit", temp).apply(); + mBoardTopLimit = exInfoValueSp.getInt("top_limit", 50); + } + + @Override + public void triggerBoardTempListener(boolean isListener) { + //开关 + if (isListener) { + //设置alarm + int nextDistance = mBoardCheckCycle * 1000; + Intent intent = new Intent(); + intent.setAction(AlarmManagerUtil.ALARM_ACTION); + intent.putExtra("id", AlarmManagerUtil.DEFAULT_ALARM_ID); + intent.putExtra("intervalMillis", nextDistance); + AlarmManagerUtil.setAlarmTime(SensorDataService.this, + nextDistance, + intent); + } else { + //取消alarm + AlarmManagerUtil.cancelAlarm(SensorDataService.this, AlarmManagerUtil.ALARM_ACTION, + AlarmManagerUtil.DEFAULT_ALARM_ID); + } + } + + @Override + public void registerCallback(IExInfoCallback callback) { + //注册回调接,目前只有一个地方,直接保存为成员吧 + mExInfoCallback = callback; + } + + @Override + public void unregisterCallback(IExInfoCallback callback) { + //取消接口注册 + mExInfoCallback = null; + } + }; + //这个是温度通知的,如果任务已经在队列里了,那么就不再发送任务了,但是会被通知到的。 private final RemoteCallbackList temperatureCallbacks = @@ -605,6 +682,7 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp //创建测试温度的任务 createTask(jxTempMode, TestTaskEvent.SensorType.TEMPERATURE, null); } + return super.onStartCommand(intent, flags, startId); } diff --git a/app/src/main/java/com/ic/work/TemperatureListenerReceiver.java b/app/src/main/java/com/ic/work/TemperatureListenerReceiver.java deleted file mode 100644 index 588807f..0000000 --- a/app/src/main/java/com/ic/work/TemperatureListenerReceiver.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ic.work; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -/** - * 这个是监听获取 温度的周期Alarm - */ -public class TemperatureListenerReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - //TODO: - } -} diff --git a/app/src/main/java/com/ic/work/utils/AlarmManagerUtil.java b/app/src/main/java/com/ic/work/utils/AlarmManagerUtil.java index 0b9841f..f391f78 100644 --- a/app/src/main/java/com/ic/work/utils/AlarmManagerUtil.java +++ b/app/src/main/java/com/ic/work/utils/AlarmManagerUtil.java @@ -12,10 +12,11 @@ import java.util.Date; public class AlarmManagerUtil { public static final String ALARM_ACTION = "com.ic.alarm.action.BOARD_TEMPERATURE_CHECK"; + public static final int DEFAULT_ALARM_ID = 98133; public static void setAlarmTime(Context context, long timeInMillis, Intent intent) { AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - PendingIntent sender = PendingIntent.getBroadcast(context, intent.getIntExtra("id", 0), + PendingIntent sender = PendingIntent.getService(context, intent.getIntExtra("id", DEFAULT_ALARM_ID), intent, PendingIntent.FLAG_CANCEL_CURRENT); int interval = (int) intent.getLongExtra("intervalMillis", 0); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { diff --git a/app/src/main/java/com/ic/work/utils/ICWorkConstants.java b/app/src/main/java/com/ic/work/utils/ICWorkConstants.java index 7353836..8b6f2b6 100644 --- a/app/src/main/java/com/ic/work/utils/ICWorkConstants.java +++ b/app/src/main/java/com/ic/work/utils/ICWorkConstants.java @@ -21,6 +21,8 @@ public interface ICWorkConstants { String ACTION_HEART_RATE = "com.ic.sensor.data.action.HEART_RATE"; } + String ACTION_EX_INFO = "com.ic.action.EX_INFO"; + interface Jx { //虽然对方单词写错了,但是也不能改 //心率检测结果广播通知给laucnher diff --git a/app/src/main/java/com/ic/work/utils/TemperatureUtil.java b/app/src/main/java/com/ic/work/utils/TemperatureUtil.java index d75794b..6e414a5 100644 --- a/app/src/main/java/com/ic/work/utils/TemperatureUtil.java +++ b/app/src/main/java/com/ic/work/utils/TemperatureUtil.java @@ -45,13 +45,23 @@ public class TemperatureUtil { public static final String CMD_BOARD_TEM = "/sys/class/thermal/thermal_zone4/temp"; public static final String CMD_BOARD_TYPE = "/sys/class/thermal/thermal_zone4/type"; + public static double getBoardTemperature() { + double boardTemp/*主板的温度*/ = 0.0f; + try { + String boardTempStr = TempFileUtils.readFile(CMD_BOARD_TEM); + boardTemp = Integer.parseInt(boardTempStr) / 1000.0f; + } catch (Exception e) { + e.printStackTrace(); + } + return boardTemp; + } /** * 这里获取到CPU温度,主板温度,体温,外温的数据,然后写到log里,后面转成数据表,再转成函数表达式。 */ public static TemperatureItem doTempTest() throws AlgorithmUtils.TempValueException { if (ICJniUtils.isTemperatureDevAvailable() > ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_NONE.ordinal()) { - double bodyTemp/*体温*/ = 0.0f; + double wristTemp/*腕温*/ = 0.0f; double cpuTemp/*cpu温度*/ = 0.0f; double evnTemp/*环境温度*/ = 0.0f; double gpuTemp/*gpu温度*/ = 0.0f; @@ -93,18 +103,17 @@ public class TemperatureUtil { //no crash is okay. } evnTemp = get_tempOut_value_origin(); - bodyTemp = get_temp_value_adjusted(); + wristTemp = get_temp_value_adjusted(); String property = Utils.getSystemProperties("persist.sys.id_num", null); double resultEnvTemp = -100; - double resultBodyTemp = 0; + double resultWristTemp = 0; ICLogger.d("property == > " + property); double lastBodyTemp = 0.0; if ("l004pt".equals(property)) { - double bodyTempResult = AlgorithmUtils.l004Pt(bodyTemp, evnTemp); + double bodyTempResult = AlgorithmUtils.l004Pt(wristTemp, evnTemp); ICLogger.d("bodyTempResult == > " + bodyTempResult); //这个是换算后的腕温 - bodyTemp = bodyTempResult; if (bodyTempResult != -1) { //越接近34.1越准确 ICLogger.d("bodyTempResult == > " + bodyTempResult); @@ -114,18 +123,18 @@ public class TemperatureUtil { } } else if ("q3ft".equals(property)) { resultEnvTemp = AlgorithmUtils.s123GetEnvData(evnTemp, boardTemp); - resultBodyTemp = AlgorithmUtils.s123GetBodyTemp(bodyTemp, boardTemp); + resultWristTemp = AlgorithmUtils.s123GetBodyTemp(wristTemp, boardTemp); if (resultEnvTemp > 0.0f) { - lastBodyTemp = TemperatureUtil.getBodyTemp(resultBodyTemp, resultEnvTemp); + lastBodyTemp = TemperatureUtil.getBodyTemp(resultWristTemp, resultEnvTemp); } else { - lastBodyTemp = TemperatureUtil.getBodyTemp(resultBodyTemp, 26.0f); + lastBodyTemp = TemperatureUtil.getBodyTemp(resultWristTemp, 26.0f); } IcLog.d(TAG, "evnTemp == > " + evnTemp + " resultEnvTemp = > " + resultEnvTemp); - IcLog.d(TAG, "bodyTemp == > " + bodyTemp + " resultBodyTemp = > " + lastBodyTemp); + IcLog.d(TAG, "bodyTemp == > " + wristTemp + " resultWristTemp = > " + lastBodyTemp); } else if ("L56A".equals(property)) { - double bodyTempResult = AlgorithmUtils.l56A(bodyTemp, evnTemp); - bodyTemp = bodyTempResult; + double bodyTempResult = AlgorithmUtils.l56A(wristTemp, evnTemp); + wristTemp = bodyTempResult; ICLogger.d("bodyTempResult == > " + bodyTempResult); if (bodyTempResult != -1) { //越接近34.1越准确 @@ -135,17 +144,17 @@ public class TemperatureUtil { ICLogger.d("final wrist temp == > " + bodyTempResult); } } else if ("MW13C".equals(property)) { - bodyTemp = AlgorithmUtils.getInstance(WorkServiceApp.sContext).MW13C(bodyTemp, boardTemp); - if (bodyTemp == 0) { + wristTemp = AlgorithmUtils.getInstance(WorkServiceApp.sContext).MW13C(wristTemp, boardTemp); + if (wristTemp == 0) { return null; } - lastBodyTemp = getBodyTemp(bodyTemp, 26.1f); + lastBodyTemp = getBodyTemp(wristTemp, 26.1f); } else { // double bodyTempResult = AlgorithmUtils.l004Pt(bodyTemp, evnTemp); - ICLogger.d("wrist TempResult == > " + bodyTemp); - if (bodyTemp != -1) { + ICLogger.d("wrist TempResult == > " + wristTemp); + if (wristTemp != -1) { //越接近34.1越准确 - lastBodyTemp = getBodyTemp(bodyTemp, 26.1f); + lastBodyTemp = getBodyTemp(wristTemp, 26.1f); ICLogger.d("final body temp == > " + lastBodyTemp); } } @@ -155,7 +164,7 @@ public class TemperatureUtil { try { //发送消息给launcher显示 TemperatureItem temperatureItem = new TemperatureItem( - String.format("%.01f", bodyTemp), + String.format("%.01f", resultWristTemp), String.format("%.01f", lastBodyTemp), String.format("%.01f", cpuTemp), String.format("%.01f", resultEnvTemp),