From: TrillGates Date: Fri, 23 Jul 2021 08:45:37 +0000 (+0800) Subject: add blood pressure adjust codes. X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.js?a=commitdiff_plain;h=a18c0477deeafd133f607b09efd6ea2da1661a6d;p=icworkservice.git add blood pressure adjust codes. --- diff --git a/app/IcL02WorkService/release/IcL02WorkService_V59_202107061808_release.apk b/app/IcL02WorkService/release/IcL02WorkService_V59_202107061808_release.apk deleted file mode 100644 index f29894a..0000000 Binary files a/app/IcL02WorkService/release/IcL02WorkService_V59_202107061808_release.apk and /dev/null differ diff --git a/app/IcL02WorkService/release/IcL02WorkService_V59_202107231453_release.apk b/app/IcL02WorkService/release/IcL02WorkService_V59_202107231453_release.apk new file mode 100644 index 0000000..536807c Binary files /dev/null and b/app/IcL02WorkService/release/IcL02WorkService_V59_202107231453_release.apk differ diff --git a/app/IcL02WorkService/release/output.json b/app/IcL02WorkService/release/output.json index 4be6115..a8c61a5 100644 --- a/app/IcL02WorkService/release/output.json +++ b/app/IcL02WorkService/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.1","enabled":true,"outputFile":"IcL02WorkService_V59_202107211148_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V59_202107211148_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_V59_202107231453_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V59_202107231453_release.apk","properties":{}}] \ 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 1d96a18..db1d36a 100644 --- a/app/src/main/java/com/ic/work/SensorDataService.java +++ b/app/src/main/java/com/ic/work/SensorDataService.java @@ -1,6 +1,7 @@ package com.ic.work; import android.app.Service; +import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.database.ContentObserver; @@ -18,7 +19,6 @@ import androidx.annotation.Nullable; import com.ic.work.domain.HeartRate; import com.ic.work.domain.Temperature; -import com.ic.work.event.AkBloodCheckResultEvent; import com.ic.work.event.BloodSensorEvent; import com.ic.work.event.TestTaskEvent; import com.ic.work.hardware.BloodInfoHelper; @@ -203,8 +203,9 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp IcLog.d(TAG, "task == start == > " + testTaskEvent); //当结果回来的时候,如果队列里没有了,那么就false了 isRunning = true; + //获取一下,是否有校准值 + updateAdjustValue(); //这里处理指令,不可以开启子线程 - switch (testTaskEvent.sensorType) { case HEART_RATE_AND_OXYGEN: //获取心率内容 @@ -469,9 +470,9 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp IcLog.d(TAG, "create new task == > " + taskEvent); synchronized (mTaskLock) { //判断队列里是否有同样的任务,如果有的话不用发了, - IcLog.d(TAG, "contains == > " + mTaskList.contains(taskEvent)+", tag = "+tag); + IcLog.d(TAG, "contains == > " + mTaskList.contains(taskEvent) + ", tag = " + tag); if (mTaskList.contains(taskEvent)) { - IcLog.d(TAG, "task contains..." + fromByValue+", tag = "+tag); + IcLog.d(TAG, "task contains..." + fromByValue + ", tag = " + tag); //通知正在等待执行 if (tag != null) { dispatchWaiting(censorType, tag); @@ -479,7 +480,7 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp return; } if (taskEvent.equals(currentTask)) { - IcLog.d(TAG, "current task running..."+", tag = "+tag); + IcLog.d(TAG, "current task running..." + ", tag = " + tag); //通知正在执行 if (tag != null) { dispatchTaskRunning(censorType, tag); @@ -494,7 +495,7 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp //直接运行不需要放到队列里了 EventBus.getDefault().post(taskEvent); } else { - IcLog.d(TAG, "new task waiting..." + taskEvent +", tag = "+tag); + IcLog.d(TAG, "new task waiting..." + taskEvent + ", tag = " + tag); //要放到队列里头,提示调用者正在等待执行 if (tag != null) { dispatchWaiting(censorType, tag); @@ -557,7 +558,7 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp * @param tag */ private void dispatchTaskRunning(TestTaskEvent.SensorType censorType, String tag) { - ICLogger.d("sensorType = "+(censorType == TestTaskEvent.SensorType.HEART_RATE_AND_OXYGEN)); + ICLogger.d("sensorType = " + (censorType == TestTaskEvent.SensorType.HEART_RATE_AND_OXYGEN)); if (censorType == TestTaskEvent.SensorType.TEMPERATURE) { //温度的 synchronized (mLock) { @@ -587,7 +588,7 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp while (i > 0) { i--; String callbackTag = (String) heartRateCallbacks.getBroadcastCookie(i); - ICLogger.d("callbackTag = "+ callbackTag +", tag = "+tag); + ICLogger.d("callbackTag = " + callbackTag + ", tag = " + tag); if (callbackTag != null && callbackTag.equals(tag)) { heartRateCallbacks.getBroadcastItem(i).onGettingData(); break; @@ -618,27 +619,14 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp } } - @Subscribe(threadMode = ThreadMode.ASYNC) - public void onMessageEvent(AkBloodCheckResultEvent event) { - int[] deviation = getPPG_ECG_adjustValue(); - event.heart = event.heart + deviation[0]; - event.high = event.high + deviation[1]; - event.low = event.low + deviation[2]; - event.oxygen = event.oxygen + deviation[3]; - handleBloodResult(event.high, event.low, - event.heart, event.oxygen); - IcLog.d(TAG, "on ak blood test end..."); - checkContinue(); - } - private void checkContinue() { try { if (wakeLock != null) { wakeLock.release(); } - }catch (Exception e){ + } catch (Exception e) { Log.getStackTraceString(e.fillInStackTrace()); - }finally { + } finally { isRunning = false; currentTask = null; int size = mTaskList.size(); @@ -695,6 +683,17 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp private void dispatchHeartRateUpdate(int high, int low, int heart, int oxygen) { + //处理一下数据 + //对数据进行处理 + ICLogger.d("bloodLowDxValue == > " + bloodLowDxValue); + ICLogger.d("bloodHighDxValue == > " + bloodHighDxValue); + //差值 = 原始值-校准值 ---->所以,校准值 = 原始值-差值 + if (bloodLowDxValue != 0) { + high = high - bloodLowDxValue; + } + if (bloodHighDxValue != 0) { + low = low - bloodHighDxValue; + } //更新一下数据 HeartRate heartRate = new HeartRate(high, low, heart, oxygen); synchronized (mLock) { @@ -712,12 +711,62 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp } } + + private boolean hasUpdateAdjustBloodPressureValue = false; + private int bloodHighDxValue = 0; + private int bloodLowDxValue = 0; + + /** + * 查一下,是否有校准值 + * 血压舒张校准值:blood_high_dx + * 血压收缩校准值:blood_low_dx + * 此为耗时操作,最好在子线程中去完成 + * 在血压检测开始前,可以调用一下这个方法,去更新一下值 + * 如果这个值已经更新了,那么就不要再去更新了 + * 也就是只检查一次即可。 + */ + private void updateAdjustValue() { + if (hasUpdateAdjustBloodPressureValue) { + return; + } + hasUpdateAdjustBloodPressureValue = true; + ContentResolver contentResolver = WorkServiceApp.sContext.getContentResolver(); + Cursor bloodHighDxCursor = contentResolver.query(Uri.parse(SETTINGS), + new String[]{"s_value"}, "s_value=?", + new String[]{"blood_high_dx"}, null); + + if (bloodHighDxCursor != null) { + bloodHighDxValue = bloodHighDxCursor.getInt(0); + ICLogger.d("bloodHighDxValue == > " + bloodHighDxValue); + bloodHighDxCursor.close(); + } + Cursor bloodLowDxCursor = contentResolver.query(Uri.parse(SETTINGS), + new String[]{"s_value"}, "s_value=?", + new String[]{"blood_low_dx"}, null); + + if (bloodLowDxCursor != null) { + bloodLowDxValue = bloodLowDxCursor.getInt(0); + ICLogger.d("bloodLowDxValue == > " + bloodLowDxValue); + bloodLowDxCursor.close(); + } + + + } + /** * 分发心率测试结果 * * @param heartRate */ private void dispatchHeartRateResult(HeartRate heartRate) { + //对数据进行处理 + //差值 = 原始值-校准值 ---->所以,校准值 = 原始值-差值 + if (bloodLowDxValue != 0) { + heartRate.setBloodLow(heartRate.getBloodLow() - bloodLowDxValue); + } + if (bloodHighDxValue != 0) { + heartRate.setBloodHeight(heartRate.getBloodHeight() - bloodHighDxValue); + } synchronized (mLock) { int i = heartRateCallbacks.beginBroadcast(); IcLog.d(TAG, "heart rate callback size == > " + i);