-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.1","enabled":true,"outputFile":"IcL02WorkService_V60_202212202120_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V60_202212202120_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_V61_202305022333_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V61_202305022333_release.apk","properties":{}}]
\ No newline at end of file
<action android:name="com.jx.lanucher.action.heartrate" />
<action android:name="com.ic.sensor.data.action.TEMPERATURE" />
<action android:name="com.ic.sensor.data.action.HEART_RATE" />
+ <action android:name="action.WORK_SERVICE_SECOND_TIMER" />
</intent-filter>
</service>
public static final String KEY_TEMP_WRIST = "wrist"; // double 腕温
public static final String KEY_TEMP_OUT = "out"; // double 腕温
private static final String HEART_ACTION = "com.ic.action.BLOOD_HEART";
+ public static final String ACTION_WORKSERVICE_SECOND_TIMER = "action.WORK_SERVICE_SECOND_TIMER";
private static final String TAG = "SensorDataService";
private final LinkedBlockingDeque<TestTaskEvent> mTaskList = new LinkedBlockingDeque<>();
jxTempMode = intent.getIntExtra(JX_KEY_MODE, -1);
//创建测试温度的任务
createTask(jxTempMode, TestTaskEvent.SensorType.TEMPERATURE, null);
+ } else if (ACTION_WORKSERVICE_SECOND_TIMER.equals(action)){
+ ICLogger.d("onStartCommand "+ACTION_WORKSERVICE_SECOND_TIMER);
+ BloodInfoHelper.getInstance().checkResultData();
}
return super.onStartCommand(intent, flags, startId);
}
import android.hardware.SensorManager;
import android.util.Log;
+import com.ic.work.SensorDataService;
import com.ic.work.WorkServiceApp;
import com.ic.work.utils.ICLogger;
import com.ic.work.utils.IcLog;
+import com.ic.work.utils.Utils;
import java.util.Random;
checkCount = 0;
noWearCount = 0;
invalidateTime = 0;
+
+ Utils.setSensorDataServiceRealTimeAlarmInSeconds(WorkServiceApp.sContext,1, SensorDataService.ACTION_WORKSERVICE_SECOND_TIMER);
} else {
//这个走JNI获取数据的,完成了
ICLogger.e("No Blood sensor ");
this.mListener = listener;
}
- @Override
- public void onSensorChanged(SensorEvent event) {
- float values[] = event.values;
- int length = values.length;
- Log.e(TAG, "onSensorChanged() is called " + length);
- if (length >= 5) {
- /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/
- Log.e(TAG, "onSensorChanged() is called " + length
- + "PPG= " + values[0]
- + "BPH= " + values[1]
- + "BPL= " + values[2]
- + "spo2= " + values[3]
- + "Weared= " + values[4]
- );
- } else {
- Log.d(TAG, "on sensor change == > PPG= " + values[0]);
- }
- ndkHeart = (int) values[0];
- isWear = (int)values[4] > 1;
+ /**
+ * 按秒钟检查测试结果,防止无佩戴时长时间不超时。
+ */
+ public void checkResultData(){
IcLog.d(TAG, "isWear == > " + isWear);
if (!isWear) {
//延时1秒进行检查
IcLog.d(TAG, "noWearCount == > " + noWearCount);
if (noWearCount > 20) {
handleResult();
+ return;
}
} else {
noWearCount = 0;
}
if (ndkHeart > 0) {
- ndkHigh = (int)values[1];
- ndkLow = (int)values[2];
- oxygen = (int)values[3];
- if (oxygen <= 0) oxygen = randomOxygenValue();
if (mListener != null) {
IcLog.d(TAG, "ndkHigh == > " + ndkHigh + "ndkLow == > " + ndkLow + "oxygen == > " + oxygen);
mListener.onHeartRateUpdate(ndkHigh, ndkLow, ndkHeart, oxygen);
//继续测试
} else {
handleResult();
+ return;
}
IcLog.d(TAG, "use time == > " + (System.currentTimeMillis() - getPPGStartTime));
} else {
if (invalidateTime <= 30) {
} else {
handleResult();
+ return;
}
}
+ Utils.setSensorDataServiceRealTimeAlarmInSeconds(WorkServiceApp.sContext,1, SensorDataService.ACTION_WORKSERVICE_SECOND_TIMER);
+
+ }
+ @Override
+ public void onSensorChanged(SensorEvent event) {
+ float values[] = event.values;
+ int length = values.length;
+ Log.e(TAG, "onSensorChanged() is called " + length);
+ if (length >= 5) {
+ /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/
+ Log.e(TAG, "onSensorChanged() is called " + length
+ + "PPG= " + values[0]
+ + "BPH= " + values[1]
+ + "BPL= " + values[2]
+ + "spo2= " + values[3]
+ + "Weared= " + values[4]
+ );
+ } else {
+ Log.d(TAG, "on sensor change == > PPG= " + values[0]);
+ }
+ ndkHeart = (int) values[0];
+ isWear = (int)values[4] > 1;
+ if (ndkHeart > 0) {
+ ndkHigh = (int) values[1];
+ ndkLow = (int) values[2];
+ oxygen = (int) values[3];
+ if (oxygen <= 0) oxygen = randomOxygenValue();
+ }
}
@Override
if (delayTimesInSeconds <= 0) {
if (mListener != null) {
ICLogger.d("result == >lastWristTemp " + lastWristTemp + " lastBodyTemp" + lastBodyTemp + " lastTempOut" + lastTempOut);
- mSensorManager.unregisterListener(this);
mListener.onTemperatureResult(lastWristTemp, lastBodyTemp, lastTempOut);
+ mSensorManager.unregisterListener(this);
}
}
}
private static Context mContext = null;
private static Logger Log = null;
- private static Logger GPS = null;
- private static Logger Nmea = null;
- private static Logger APILog = null;
- private static Logger alarmCycle = null;
- private static Logger Battery = null;
- private static Logger LBS = null;
// private static java.util.logging.Logger originLog= getLogger(ICLogger.class.getSimpleName());
private static final boolean DEBUG = true; //BuildConfig.DEBUG;
//Log 和log目前是同一个配置
Log = getLogger("log");
Log.info("init Logger " + Log.getName());
-// Log.addAppender( getRollingFileAppender("log","%d %m%n "));
-// Log.info("init Logger "+Log.getName()+" "+((RollingFileAppender)Log.getAppender("log")).getFile());
-
- GPS = getLogger("GPS");
- GPS.addAppender(getRollingFileAppender("GPS", "%d %m%n "));
- GPS.info("init Logger " + GPS.getName() + " " + ((RollingFileAppender) GPS.getAppender("GPS")).getFile());
-
- Nmea = getLogger("Nmea");
- Nmea.addAppender(getRollingFileAppender("Nmea", "%m%n"));
- Nmea.info("init Logger " + Nmea.getName() + " " + ((RollingFileAppender) Nmea.getAppender("Nmea")).getFile());
-
- APILog = getLogger("APILog");
- APILog.addAppender(getRollingFileAppender("APILog", "%d %m%n "));
- APILog.info("init Logger " + APILog.getName() + " " + ((RollingFileAppender) APILog.getAppender("APILog")).getFile());
-
- alarmCycle = getLogger("alarmCycle");
- alarmCycle.addAppender(getRollingFileAppender("alarmCycle", "%d %m%n "));
- alarmCycle.info("init Logger " + alarmCycle.getName() + " " + ((RollingFileAppender) alarmCycle.getAppender("alarmCycle")).getFile());
-
- Battery = getLogger("Battery");
- Battery.addAppender(getRollingFileAppender("Battery", "%d %m%n "));
- Battery.info("init Logger " + Battery.getName() + " " + ((RollingFileAppender) Battery.getAppender("Battery")).getFile());
-
-
- LBS = getLogger("LBS");
- LBS.addAppender(getRollingFileAppender("LBS", "%d %m%n "));
- LBS.info("init Logger " + LBS.getName() + " " + ((RollingFileAppender) LBS.getAppender("LBS")).getFile());
+ //Log.addAppender( getRollingFileAppender("log","%d %m%n "));
+ //Log.info("init Logger "+Log.getName()+" "+((RollingFileAppender)Log.getAppender("log")).getFile());
isInitConfig = true;
}
}
public static void logRAWtoFile(String filename, String msg) {
- if (filename.equals("Nmea")) {
- Nmea.info(msg);
- } else if (filename.equals("LBS")) {
- LBS.info(msg);
- } else if (filename.equals("GPS")) {
- GPS.info(msg);
- } else if (filename.equals("APILog")) {
- APILog.info(msg);
- } else if (filename.equals("alarmCycle")) {
- alarmCycle.info(msg);
- } else if (filename.equals("Battery")) {
- Battery.info(msg);
- } else {
- Log.info(msg);
- }
+ Log.info(msg);
}
public static void logToFile(String filename, String msg) {
- if (filename.equals("Nmea")) {
- Nmea.info(msg);
- } else if (filename.equals("LBS")) {
- LBS.info(msg);
- } else if (filename.equals("GPS")) {
- GPS.info(msg);
- } else if (filename.equals("APILog")) {
- APILog.info(msg);
- } else if (filename.equals("alarmCycle")) {
- alarmCycle.info(msg);
- } else if (filename.equals("Battery")) {
- Battery.info(msg);
- } else {
- Log.info(msg);
- }
+ Log.info(msg);
}
private static RollingFileAppender getRollingFileAppender(String name, String layoutpattern) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
dir = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_DOCUMENTS), "Android/ic/icWorkService");
} else {
- dir = new File(Environment.getExternalStorageDirectory().getPath(), "Android/ic/icprotocol");
+ dir = new File(Environment.getExternalStorageDirectory().getPath(), "Android/ic/icWorkService");
}
String path = dir.getPath();
package com.ic.work.utils;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.SystemClock;
+
+import com.ic.work.SensorDataService;
+import com.ic.work.WorkService;
+
import java.lang.reflect.Method;
public class Utils {
}
return str;
}
-
+ public static void setSensorDataServiceRealTimeAlarmInSeconds(Context context, int seconds, String actionname) {
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ Intent intent = new Intent(context, SensorDataService.class);
+ intent.setAction(actionname);
+ PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ alarmManager.cancel(pendingIntent);
+ long l = SystemClock.elapsedRealtime();
+ if (Build.VERSION.SDK_INT >= 19) {
+ alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent);
+ return;
+ }
+ alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent);
+ }
}
#Thu Jul 16 16:46:05 CST 2020
-VERSION_CODE=60
+VERSION_CODE=61