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;
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";
private LocalDateTime mFinishTime;
private BloodSensorManager bloodSensorManager;
+ //这两个是掌育给过来的测试模式
+ //0: 家长实时检测 1:周期上报 2:手表主动检测
+ private int jxHeartRateMode = -1;
+ private int jxTempMode = -1;
@Override
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();
@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(),
}
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()) {
@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);
}
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;
case 2:
ThreadPoolManager.getInstance().execute(new PedRecordRunnable(mApp.getRepository()));
break;
- case 3:
+ case TEST_BLOOD:
ThreadPoolManager.getInstance().execute(new BloodRunnable());
break;
case 5:
pedIntent.putExtra(KEY_TEMP_BODY, animal);
pedIntent.putExtra(KEY_TEMP_OUT, tempOut);
sendBroadcast(pedIntent);
+ IcLog.d(TAG, " sendTempBroadcast...");
}
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
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 {
private RemoteCallbackList<ITempAidlInterface> mCallbacks = new RemoteCallbackList<>();
- public IBinder getTempBinder(){
+ public IBinder getTempBinder() {
return tempBinder;
}
@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);
}
}
}