fixed s123 temperature UI.
authorTrillGates <williamtrillgates@gmail.com>
Fri, 24 Sep 2021 06:57:55 +0000 (14:57 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Fri, 24 Sep 2021 06:57:55 +0000 (14:57 +0800)
app/src/main/aidl/com/ic/work/IExInfoCallback.aidl
app/src/main/aidl/com/ic/work/IExInfoService.aidl
app/src/main/java/com/ic/work/SensorDataService.java
app/src/main/java/com/ic/work/TemperatureListenerReceiver.java [deleted file]
app/src/main/java/com/ic/work/utils/AlarmManagerUtil.java
app/src/main/java/com/ic/work/utils/ICWorkConstants.java
app/src/main/java/com/ic/work/utils/TemperatureUtil.java

index 3a11009..b57f847 100644 (file)
@@ -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
index c01c34e..40c98e3 100644 (file)
@@ -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
index d9c98d0..68c5779 100644 (file)
@@ -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<ITempSensorCallback> 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 (file)
index 588807f..0000000
+++ /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:
-    }
-}
index 0b9841f..f391f78 100644 (file)
@@ -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) {
index 7353836..8b6f2b6 100644 (file)
@@ -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
index d75794b..6e414a5 100644 (file)
@@ -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),