ICLogger.d("deviceState[1]..." + deviceState[1]);
if (deviceState[1]) {
mSensorManager = (SensorManager) WorkServiceApp.sContext.getSystemService(SENSOR_SERVICE);
- Sensor mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
+ mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_FASTEST);
Log.d(TAG, "ret == > " + ret);
+ isWear=false;
+ ndkHeart = 0;
+ ndkHigh = 0;
+ ndkLow = 0;
+ oxygen = 0;
+ checkCount = 0;
+ noWearCount = 0;
+ invalidateTime = 0;
//TODO:这个是走官方API的,也得有机器再进行修改代码
//sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
// EventBus.getDefault().post(new BloodSensorEvent(1));
checkBloodOther();
}
}
-
+ private Sensor mHeartRate = null;
private int ndkHeart = 0;
private int ndkHigh = 0;
private int ndkLow = 0;
}
});
}
-
+ private void doPPGtest(){
+ if (ndkHeart > 0) {
+ if (oxygen <= 0) oxygen = randomOxygenValue();
+ if (mListener != null) {
+ IcLog.d(TAG, "ndkHigh == > " + ndkHigh + "ndkLow == > " + ndkLow + "oxygen == > " + oxygen);
+ mListener.onHeartRateUpdate(ndkHigh, ndkLow, ndkHeart, oxygen);
+ }
+ checkCount++;
+ IcLog.d(TAG, "checkCount == > " + checkCount);
+ } else {
+ //如果为0的话,记录下来
+ invalidateTime++;
+ IcLog.d(TAG, "invalidateTime == > " + invalidateTime);
+ }
+ }
//- 数据测试结果为0,如果连续20个数据为0,那么就结束此次测试
//- 有数据以后,连续测上10次,就可以返回结果了
private void doTest() {
//这部分代码要做超时处理{
long getPPGStartTime = System.currentTimeMillis();
ndkHeart = HardwareUtils.getNdkPPGValue();
- if (ndkHeart > 0) {
- ndkHigh = HardwareUtils.getNdkHighBloodValue();
- ndkLow = HardwareUtils.getNdkLowBloodValue();
- oxygen = HardwareUtils.getNdkOxygenValue();
- if (oxygen <= 0) oxygen = randomOxygenValue();
- if (mListener != null) {
- IcLog.d(TAG, "ndkHigh == > " + ndkHigh + "ndkLow == > " + ndkLow + "oxygen == > " + oxygen);
- mListener.onHeartRateUpdate(ndkHigh, ndkLow, ndkHeart, oxygen);
- }
- checkCount++;
- IcLog.d(TAG, "checkCount == > " + checkCount);
- if (checkCount <= 10) {
- //继续测试
- ppgLooper.postDelayed(this, 1000);
- } else {
- handleResult();
- }
- IcLog.d(TAG, "use time == > " + (System.currentTimeMillis() - getPPGStartTime));
+ ndkHigh = HardwareUtils.getNdkHighBloodValue();
+ ndkLow = HardwareUtils.getNdkLowBloodValue();
+ oxygen = HardwareUtils.getNdkOxygenValue();
+ doPPGtest();
+ if ( checkCount > 10 || invalidateTime > 30) {
+ handleResultOtherBlood();
} else {
- //如果为0的话,记录下来
- invalidateTime++;
- IcLog.d(TAG, "invalidateTime == > " + invalidateTime);
- if (invalidateTime <= 30) {
- ppgLooper.postDelayed(this, 1000);
- } else {
- handleResult();
- }
+ //继续测试
+ ppgLooper.postDelayed(this, 1000);
}
+ IcLog.d(TAG, "use time == > " + (System.currentTimeMillis() - getPPGStartTime));
}
});
}
- private void handleResult() {
+ private void handleResultOtherBlood() {
if (mListener != null) {
mListener.onHeartRateResult(ndkHigh, ndkLow, ndkHeart, oxygen);
}
if (mListener != null) {
mListener.onHeartRateTestFinished();
}
+
try {
IcLog.d(TAG, "disable ppg..");
HardwareUtils.onNdkDisablePPG();
}
IcLog.d(TAG, "total use time == checkBloodStartTime > " + (System.currentTimeMillis() - checkBloodStartTime));
}
+ private void handleResult() {
+ if (mListener != null) {
+ mListener.onHeartRateResult(ndkHigh, ndkLow, ndkHeart, oxygen);
+ }
+ if (mListener != null) {
+ mListener.onHeartRateTestFinished();
+ }
+
+ try {
+ IcLog.d(TAG, "disable ppg..");
+ if(mHeartRate!=null)
+ mSensorManager.unregisterListener(this,mHeartRate);
+ } catch (Exception e) {
+ IcLog.e(TAG, "Stop Get Heart Value", e);
+ }
+ IcLog.d(TAG, "total use time == checkBloodStartTime > " + (System.currentTimeMillis() - checkBloodStartTime));
+ }
private int randomOxygenValue() {
+ "spo2= " + values[3]
+ "Weared= " + values[4]
);
+
+ ndkHeart = (int)values[0];//调用底层函数保证状态更新。
+ ndkHigh = (int)values[1];
+ ndkLow = (int)values[2];
+ oxygen = (int)values[3];
+ isWear = ((int)values[4] == 2);
+ // isPPGTesting = true;// (ICJniUtils.isPPGStarted() == 1);
+ doPPGtest();
+ /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/
+ if ( checkCount > 10 || invalidateTime > 30) {
+ handleResult();
+ }
} else {
Log.d(TAG, "on sensor change == > PPG= " + values[0]);
}