add broadcast for zhangyu inc. launcher
authorkfl_614 <kfl_614@163.com>
Fri, 4 Dec 2020 12:40:37 +0000 (20:40 +0800)
committerkfl_614 <kfl_614@163.com>
Fri, 4 Dec 2020 12:40:37 +0000 (20:40 +0800)
app/IcL02WorkService/release/IcL02WorkService_V57_202012031615_release.apk [deleted file]
app/IcL02WorkService/release/IcL02WorkService_V57_202012041649_release.apk [new file with mode: 0644]
app/IcL02WorkService/release/output.json
app/src/main/java/com/ic/work/ThreadPoolManager.java
app/src/main/java/com/ic/work/WorkService.java
app/src/main/java/com/ic/work/hardware/MessengerCoreService.java
app/src/main/java/com/ic/work/process/AkProcess.java
app/src/main/java/com/ic/work/process/BloodProcess.java
app/src/main/java/com/ic/work/process/TempProcess.java
app/src/main/java/com/ic/work/utils/ICWorkConstants.java

diff --git a/app/IcL02WorkService/release/IcL02WorkService_V57_202012031615_release.apk b/app/IcL02WorkService/release/IcL02WorkService_V57_202012031615_release.apk
deleted file mode 100644 (file)
index 3466dfc..0000000
Binary files a/app/IcL02WorkService/release/IcL02WorkService_V57_202012031615_release.apk and /dev/null differ
diff --git a/app/IcL02WorkService/release/IcL02WorkService_V57_202012041649_release.apk b/app/IcL02WorkService/release/IcL02WorkService_V57_202012041649_release.apk
new file mode 100644 (file)
index 0000000..b6cdcb5
Binary files /dev/null and b/app/IcL02WorkService/release/IcL02WorkService_V57_202012041649_release.apk differ
index bb8098c..7ef47a6 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.1","enabled":true,"outputFile":"IcL02WorkService_V57_202012031615_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V57_202012031615_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.1","enabled":true,"outputFile":"IcL02WorkService_V57_202012041649_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V57_202012041649_release.apk","properties":{}}]
\ No newline at end of file
index a356209..c885690 100644 (file)
@@ -44,6 +44,6 @@ public class ThreadPoolManager {
         for (Future<?> future : futures) {
             future.cancel(true);
         }
-
+        futures.clear();
     }
 }
index cada709..bbd9289 100644 (file)
@@ -57,6 +57,7 @@ import org.threeten.bp.ZoneId;
 import static com.ic.work.utils.ICWorkConstants.EventType.STOP_ALL_TASK;
 import static com.ic.work.utils.ICWorkConstants.EventType.TEST_A9_BLOOD;
 import static com.ic.work.utils.ICWorkConstants.EventType.TEST_AK_BLOOD;
+import static com.ic.work.utils.ICWorkConstants.EventType.TEST_BLOOD;
 import static com.ic.work.utils.ICWorkConstants.EventType.TEST_TEMPERATURE;
 import static com.ic.work.utils.ICWorkConstants.ServiceType.ACTION_BLOOD;
 import static com.ic.work.utils.ICWorkConstants.ServiceType.ACTION_HARD_WARE;
@@ -81,6 +82,37 @@ public class WorkService extends Service {
     public static final String KEY_TEMP_WRIST = "wrist";  //  double 腕温
     public static final String KEY_TEMP_OUT = "out";  //  double 腕温
 
+
+    //虽然对方单词写错了,但是也不能改
+    //心率检测结果广播通知给laucnher
+    public static final String ACTION_AEE_HEART_RATE = "com.jx.lanucher.heartrate.checkend";
+
+    //体温检测结果广播通知给laucnher
+    public static final String ACTION_AEE_TEMPERATURE = "com.jx.lanucher.temperature.checkend";
+
+    //launcher启动体温service
+    public static final String ACTION_GET_TEMPERATURE = "com.jx.lanucher.action.temperature";
+
+    //launcher启动心率service
+    public static final String ACTION_GET_HEART_RATE = "com.jx.lanucher.action.heartrate";
+
+    //模式 0:家长实时检测 1:周期上报 2:手表主动检测
+    public static final String JX_KEY_MODE = "mode";
+    //Result 0 失败 1 成功
+    public static final String JX_KEY_RESULT = "result";
+    //心率
+    public static final String JX_KEY_HEART_RATE = "heartrate";
+    //血压低值
+    public static final String JX_KEY_HEART_BLOOD_PRESS_L = "bloodpressureL";
+    //血压高值
+    public static final String JX_KEY_HEART_BLOOD_PRESS_H = "bloodpressureH";
+    //血氧
+    public static final String JX_KEY_HEART_BLOOD_OXYGEN = "bloodoxygen";
+    //类型
+    public static final String JX_KEY_HEART_TEMPERATURE_TYPE = "type";
+    //温度
+    public static final String JX_KEY_HEART_TEMPERATURE = "temp";
+
     private static final String TXT_ACTION = "action.ic.srvPushTxt";
     private static final String TYPE_KEY = "msgType";
     private static final String MSG_KEY = "txtMsg";
@@ -100,6 +132,10 @@ public class WorkService extends Service {
     private LocalDateTime mFinishTime;
 
     private BloodSensorManager bloodSensorManager;
+    //这两个是掌育给过来的测试模式
+    //0: 家长实时检测 1:周期上报 2:手表主动检测
+    private int jxHeartRateMode = -1;
+    private int jxTempMode = -1;
 
 
     @Override
@@ -153,12 +189,51 @@ public class WorkService extends Service {
         IcLog.i(TAG, "work service is start");
     }
 
+
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         IcLog.i(TAG, "WorkService onStartCommand");
+        // 掌育会startService的方式来启动服务,如果已经启动了
+        // 不走onCreate,则会走这里
+        //可以获取到相关的值,然后去获取心率/体温
+        //目前的结果,因为结构的限制,只支持单测量,也就是无法同时测量体温和心率
+        //只能测完一个再到一个
+        String action = intent.getAction();
+        IcLog.d(TAG, "onStartCommand action == > " + action);
+        //可以通过action来判断
+        if (ACTION_GET_HEART_RATE.equals(action)) {
+            //如果温度在测量,那么就返回失败
+            handleJxTestHeartRate(intent);
+        } else if (ACTION_GET_TEMPERATURE.equals(action)) {
+            handleJxTestTemperature(intent);
+        }
         return super.onStartCommand(intent, flags, startId);
     }
 
+    private void handleJxTestTemperature(Intent intent) {
+        if (jxHeartRateMode != -1) {
+            //测量心率正在繁忙,返回失败
+            sendTemperatureBroadcast2Jx(false, 0, 0);
+        } else {
+            IcLog.d(TAG, "handleJxTestTemperature...");
+            jxTempMode = intent.getIntExtra(JX_KEY_MODE, -1);
+            //测量体温
+            EventBus.getDefault().post(new ThreadPoolEvent(TEST_TEMPERATURE));
+        }
+    }
+
+    private void handleJxTestHeartRate(Intent intent) {
+        if (jxTempMode != -1) {
+            //如果掌育的温度测试正在繁忙,那么就返回失败
+            sendHeartRateBroadcast2Jx(false, 0, 0, 0, 0);
+        } else {
+            IcLog.d(TAG, "handleJxTestHeartRate...");
+            jxHeartRateMode = intent.getIntExtra(JX_KEY_MODE, -1);
+            //测量心率
+            EventBus.getDefault().post(new ThreadPoolEvent(TEST_BLOOD));
+        }
+    }
+
     @Override
     public void onDestroy() {
         super.onDestroy();
@@ -203,6 +278,14 @@ public class WorkService extends Service {
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(BloodCheckResultEvent event) {
+        //处理心率测量数据给掌育的
+        if (jxHeartRateMode != -1) {
+            //发广播给掌育
+            sendHeartRateBroadcast2Jx(true, event.getHigh(),
+                    event.getLow(), event.getHeart(), event.getOxygen());
+            //reset data.
+            jxHeartRateMode = -1;
+        }
         Log.i(TAG, "BloodCheckResultEvent " + event.getHeart());
         if (bloodProcess != null) {
             bloodProcess.sendBloodCheckResult(event.getHigh(),
@@ -210,13 +293,61 @@ public class WorkService extends Service {
         }
 
         if (coreService != null) {
-            coreService.sendBloodValueMessage(event.getHigh(), event.getLow(), event.getHeart(), event.getOxygen());
+            coreService.sendBloodValueMessage(event.getHigh(), event.getLow(),
+                    event.getHeart(), event.getOxygen());
         }
 
         //发送一次广播给 心率 launcher
         sendHeartBroadcast(event.getHeart(), event.getOxygen());
     }
 
+    /**
+     * 发送体温数据给掌育
+     *
+     * @param isSuccess 是否测量成功
+     * @param value     体温(优先使用这个)
+     * @param animal    可能是体温(测试以后再决定是否使用这个)
+     */
+    private void sendTemperatureBroadcast2Jx(boolean isSuccess, double value, double animal) {
+        IcLog.d(TAG, "sendTemperatureBroadcast2Jx -- >  " +
+                isSuccess + " value == >  " + value
+                + "animal == > " + animal);
+        Intent intent = new Intent();
+        intent.setAction(ACTION_AEE_TEMPERATURE);
+        intent.putExtra(JX_KEY_RESULT, isSuccess ? "1" : "0");
+        intent.putExtra(JX_KEY_MODE, jxTempMode);
+        intent.putExtra(JX_KEY_HEART_TEMPERATURE, value);
+        //类型0:手腕模式 1:额头模式
+        intent.putExtra(JX_KEY_HEART_TEMPERATURE_TYPE, "1");
+        sendBroadcast(intent);
+    }
+
+    /**
+     * 发送心率广播给掌育的Launcher
+     *
+     * @param high
+     * @param low
+     * @param heart
+     * @param oxygen
+     */
+    private void sendHeartRateBroadcast2Jx(boolean isSuccess, int high, int low, int heart, int oxygen) {
+        IcLog.d(TAG, "sendHeartRateBroadcast2Jx -- >  " +
+                isSuccess + " high == >  " + high
+                + "low == > " + low
+                + " heart is =-= >  " + heart
+                + "oxygen == > " + oxygen
+        );
+        Intent intent = new Intent();
+        intent.setAction(ACTION_AEE_HEART_RATE);
+        intent.putExtra(JX_KEY_MODE, jxHeartRateMode);
+        intent.putExtra(JX_KEY_HEART_BLOOD_OXYGEN, oxygen);
+        intent.putExtra(JX_KEY_HEART_BLOOD_PRESS_H, high);
+        intent.putExtra(JX_KEY_HEART_BLOOD_PRESS_L, low);
+        intent.putExtra(JX_KEY_HEART_RATE, heart);
+        intent.putExtra(JX_KEY_RESULT, isSuccess ? "1" : "0");
+        sendBroadcast(intent);
+    }
+
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(PedSettingEvent event) {
         switch (event.getType()) {
@@ -273,6 +404,11 @@ public class WorkService extends Service {
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(TemperatureResultEvent event) {
         //处理温度
+        //处理温度测量数据给掌育的
+        if (jxTempMode != -1) {
+            sendTemperatureBroadcast2Jx(true, event.value, event.animal);
+            jxTempMode = -1;
+        }
         if (tempProcess != null) {
             tempProcess.sendCurrTempValue(event.value, event.animal, event.tempOut);
         }
@@ -357,6 +493,9 @@ public class WorkService extends Service {
         int eventType = event.getEventType();
         IcLog.i(TAG, "onMessageEvent EventType " + eventType);
         if (eventType == STOP_ALL_TASK) {
+            //复位掌育mode参数
+            jxHeartRateMode = -1;
+            jxTempMode = -1;
             ThreadPoolManager.getInstance().remove();
             mIsBusy = false;
             return;
@@ -374,7 +513,7 @@ public class WorkService extends Service {
             case 2:
                 ThreadPoolManager.getInstance().execute(new PedRecordRunnable(mApp.getRepository()));
                 break;
-            case 3:
+            case TEST_BLOOD:
                 ThreadPoolManager.getInstance().execute(new BloodRunnable());
                 break;
             case 5:
@@ -425,6 +564,7 @@ public class WorkService extends Service {
         pedIntent.putExtra(KEY_TEMP_BODY, animal);
         pedIntent.putExtra(KEY_TEMP_OUT, tempOut);
         sendBroadcast(pedIntent);
+        IcLog.d(TAG, " sendTempBroadcast...");
     }
 
     private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
index 4871b76..4aacaa8 100644 (file)
@@ -26,7 +26,7 @@ public class MessengerCoreService {
     private final static String key_ppg = "ppg";
     private final static String key_bph = "bph";
     private final static String key_bpl = "bpl";
-    public static final String key_spo2="sp02";
+    public static final String key_spo2 = "sp02";
 
     private Messenger mGetReplyMessenger;
     private Messenger mService = null;
@@ -36,7 +36,6 @@ public class MessengerCoreService {
         if (mService != null) {
             return;
         }
-
         ComponentName componentName = new ComponentName(
                 "com.enqualcomm.support",
                 "com.enqualcomm.support.CoreService");
@@ -60,7 +59,7 @@ public class MessengerCoreService {
             IcLog.i(TAG, "onServiceConnected");
             mService = new Messenger(service);
             Message msg = Message.obtain(null, MSG_WHAT_SEND_VOICE);
-           msg.replyTo = mGetReplyMessenger;
+            msg.replyTo = mGetReplyMessenger;
             try {
                 mService.send(msg);
             } catch (RemoteException e) {
@@ -79,8 +78,8 @@ public class MessengerCoreService {
         }
     };
 
-    public void sendBloodValueMessage(int high, int low, int heart,int oxygen) {
-
+    public void sendBloodValueMessage(int high, int low, int heart, int oxygen) {
+        IcLog.d(TAG, "sendBloodValueMessage...");
         Bundle data = new Bundle();
 
         data.putString(key_ppg, String.valueOf(heart));
@@ -97,7 +96,6 @@ public class MessengerCoreService {
         } catch (Exception e) {
             IcLog.e(TAG, "sendBloodValueMessage", e);
         }
-
     }
 
     @SuppressLint("HandlerLeak")
index 1eb5ea1..a46be5f 100644 (file)
@@ -6,7 +6,6 @@ import android.os.RemoteException;
 
 import com.ic.aidl.ak.IAkAidlInterface;
 import com.ic.aidl.ak.IAkRemoteService;
-import com.ic.work.BuildConfig;
 import com.ic.work.event.ThreadPoolEvent;
 import com.ic.work.utils.IcLog;
 import com.ic.work.utils.IcSystemProperty;
@@ -14,6 +13,7 @@ import com.ic.work.utils.IcSystemProperty;
 import org.greenrobot.eventbus.EventBus;
 
 import static com.ic.work.utils.ICWorkConstants.EventType.STOP_ALL_TASK;
+import static com.ic.work.utils.ICWorkConstants.EventType.TEST_TEMPERATURE;
 
 
 public class AkProcess {
@@ -66,7 +66,7 @@ public class AkProcess {
 
         @Override
         public void onStartQueryTemp() throws RemoteException {
-            EventBus.getDefault().post(new ThreadPoolEvent(6));
+            EventBus.getDefault().post(new ThreadPoolEvent(TEST_TEMPERATURE));
         }
 
         @Override
index 41628d4..9beaf8a 100644 (file)
@@ -12,6 +12,7 @@ import com.ic.work.utils.IcLog;
 import org.greenrobot.eventbus.EventBus;
 
 import static com.ic.work.utils.ICWorkConstants.EventType.STOP_ALL_TASK;
+import static com.ic.work.utils.ICWorkConstants.EventType.TEST_BLOOD;
 
 
 public class BloodProcess {
@@ -40,7 +41,7 @@ public class BloodProcess {
 
         @Override
         public void startCheckBlood() throws RemoteException {
-            EventBus.getDefault().post(new ThreadPoolEvent(3));
+            EventBus.getDefault().post(new ThreadPoolEvent(TEST_BLOOD));
         }
 
         @Override
index 9198f61..d3baaca 100644 (file)
@@ -6,17 +6,13 @@ import android.os.RemoteException;
 
 import com.ic.aidl.temp.ITempAidlInterface;
 import com.ic.aidl.temp.ITempRemoteService;
-import com.ic.aidl.weather.IWeatherAidlInterface;
-import com.ic.aidl.weather.IWeatherRemoteService;
-import com.ic.aidl.weather.WeatherParcelable;
 import com.ic.work.event.ThreadPoolEvent;
 import com.ic.work.utils.IcLog;
 
 import org.greenrobot.eventbus.EventBus;
 
-import java.util.List;
-
 import static com.ic.work.utils.ICWorkConstants.EventType.STOP_ALL_TASK;
+import static com.ic.work.utils.ICWorkConstants.EventType.TEST_TEMPERATURE;
 
 public class TempProcess {
 
@@ -24,7 +20,7 @@ public class TempProcess {
 
     private RemoteCallbackList<ITempAidlInterface> mCallbacks = new RemoteCallbackList<>();
 
-    public IBinder getTempBinder(){
+    public IBinder getTempBinder() {
         return tempBinder;
     }
 
@@ -45,56 +41,54 @@ public class TempProcess {
 
         @Override
         public void onStartQueryTemp() throws RemoteException {
-            IcLog.i(TAG,"onStartQueryTemp");
-            EventBus.getDefault().post(new ThreadPoolEvent(6));
+            IcLog.i(TAG, "onStartQueryTemp");
+            EventBus.getDefault().post(new ThreadPoolEvent(TEST_TEMPERATURE));
         }
 
         @Override
         public void onStopQueryTemp() throws RemoteException {
-            IcLog.i(TAG,"onStopQueryTemp");
+            IcLog.i(TAG, "onStopQueryTemp");
             EventBus.getDefault().post(new ThreadPoolEvent(STOP_ALL_TASK));
         }
     };
 
-    public void sendCurrTempValue(double value,double animal,double tempOut) {
+    public void sendCurrTempValue(double value, double animal, double tempOut) {
         int N = 0;
-        IcLog.d(TAG, "sendCurrTempValue "+value);
+        IcLog.d(TAG, "sendCurrTempValue " + value);
         try {
             N = mCallbacks.beginBroadcast();
             for (int i = 0; i < N; i++) {
-                mCallbacks.getBroadcastItem(i).updateCurrTempValue(value,animal,tempOut);
+                mCallbacks.getBroadcastItem(i).updateCurrTempValue(value, animal, tempOut);
             }
         } catch (NullPointerException | RemoteException e) {
-            IcLog.e(TAG, "",e);
+            IcLog.e(TAG, "", e);
         } finally {
             try {
                 if (N > 0) {
                     mCallbacks.finishBroadcast();
                 }
             } catch (IllegalArgumentException ll) {
-                IcLog.e(TAG, "",ll);
+                IcLog.e(TAG, "", ll);
             }
         }
     }
 
-    public void sendResultTempValue(double value,double animal,double tempOut) {
+    public void sendResultTempValue(double value, double animal, double tempOut) {
         int N = 0;
         try {
             N = mCallbacks.beginBroadcast();
             for (int i = 0; i < N; i++) {
-                mCallbacks.getBroadcastItem(i).updateResultTempValue(value,animal,tempOut);
+                mCallbacks.getBroadcastItem(i).updateResultTempValue(value, animal, tempOut);
             }
-        } catch (NullPointerException e) {
-            IcLog.e(TAG, "",e);
-        } catch (RemoteException er) {
-            IcLog.e(TAG, "",er);
+        } catch (NullPointerException | RemoteException e) {
+            IcLog.e(TAG, "", e);
         } finally {
             try {
                 if (N > 0) {
                     mCallbacks.finishBroadcast();
                 }
             } catch (IllegalArgumentException ll) {
-                IcLog.e(TAG, "",ll);
+                IcLog.e(TAG, "", ll);
             }
         }
     }
index 0603051..44fe5a9 100644 (file)
@@ -23,6 +23,7 @@ public interface ICWorkConstants {
     interface EventType {
         //温度
         int TEST_TEMPERATURE = 6;
+        int TEST_BLOOD = 3;
         //A9的心率
         int TEST_A9_BLOOD = 7;
         //AK的心率