get ic66 heart info
authorTrillGates <williamtrillgates@gmail.com>
Sat, 6 Mar 2021 03:37:42 +0000 (11:37 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Sat, 6 Mar 2021 03:37:42 +0000 (11:37 +0800)
app/IcL02WorkService/release/IcL02WorkService_V57_202102011623_release.apk [moved from app/IcL02WorkService/release/IcL02WorkService_V57_202102011415_release.apk with 100% similarity]
app/IcL02WorkService/release/output.json
app/src/main/AndroidManifest.xml
app/src/main/java/com/ic/jni/ICJniUtils.java
app/src/main/java/com/ic/work/hardware/BloodInfoHelper.java
app/src/main/java/com/ic/work/utils/HardwareUtils.java

index ae296ab..a195a26 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.1","enabled":true,"outputFile":"IcL02WorkService_V57_202102011415_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V57_202102011415_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_202102011623_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V57_202102011623_release.apk","properties":{}}]
\ No newline at end of file
index 6b79077..4889914 100644 (file)
@@ -3,6 +3,8 @@
     package="com.ic.work"
     android:sharedUserId="android.uid.system">
 
+    <!---->
+    <uses-permission android:name="android.permission.BODY_SENSORS" />
     <!-- 这个权限用于进行网络定位-->
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
index 23de3d0..7104810 100644 (file)
@@ -25,6 +25,7 @@ public class ICJniUtils {
         PPG_EGC_TYPE_HRS3301,\r
         PPG_EGC_TYPE_IC66,\r
         PPG_EGC_TYPE_PAH8002,\r
+        PPG_EGC_TYPE_GH301,\r
         PPG_EGC_TYPE_MAX\r
     }\r
 \r
index e93c8fb..65ced8d 100644 (file)
@@ -1,23 +1,32 @@
 package com.ic.work.hardware;
 
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
 import android.os.Handler;
 import android.os.HandlerThread;
+import android.util.Log;
 
+import com.ic.work.WorkServiceApp;
 import com.ic.work.utils.HardwareUtils;
 import com.ic.work.utils.ICLogger;
 import com.ic.work.utils.IcLog;
 
 import java.util.Random;
 
+import static android.content.Context.SENSOR_SERVICE;
+
 /**
  * 此工具类获取血氧,血压,心率等信息,结果通过:
  */
-public class BloodInfoHelper {
+public class BloodInfoHelper implements SensorEventListener {
 
 
     private HeartRateInfoChangeListener mListener = null;
     private final Handler ppgLooper;
     private long checkBloodStartTime;
+    private SensorManager mSensorManager;
 
     private BloodInfoHelper() {
         //这个Looper专门用来查询数据的
@@ -44,10 +53,10 @@ public class BloodInfoHelper {
 
     public void getBloodInfo() {
         ICLogger.d("getBloodInfo...");
-        boolean[] deviceState = HardwareUtils.isPPGavailableIc66();
+        boolean[] deviceState = HardwareUtils.isPPGavailableGH301();
 
         if (!deviceState[0]) {
-            IcLog.d(TAG, "deviceState[0] == > " + deviceState[0]);
+            IcLog.d(TAG, "deviceState[0] == > false");
             //TODO:这个后面再处理,得给我机器再去处理,没有文档,没有数据
             //sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_DEVICE);
             if (mListener != null) {
@@ -59,6 +68,10 @@ public class BloodInfoHelper {
 
         ICLogger.d("deviceState[1]..." + deviceState[1]);
         if (deviceState[1]) {
+            mSensorManager = (SensorManager) WorkServiceApp.sContext.getSystemService(SENSOR_SERVICE);
+            Sensor mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
+            boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_FASTEST);
+            Log.d(TAG, "ret == > " + ret);
             //TODO:这个是走官方API的,也得有机器再进行修改代码
             //sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
             // EventBus.getDefault().post(new BloodSensorEvent(1));
@@ -197,6 +210,30 @@ public class BloodInfoHelper {
         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]);
+        }
+    }
+
+    @Override
+    public void onAccuracyChanged(Sensor sensor, int accuracy) {
+        Log.e(TAG, "onAccuracyChanged() is called " + sensor.getName() + " accuracy=" + accuracy);
+    }
+
 
     public interface HeartRateInfoChangeListener {
 
index 2e24e74..cf5dbae 100644 (file)
@@ -19,6 +19,19 @@ public class HardwareUtils {
         }
     }
 
+    public static boolean[] isPPGavailableGH301() {
+        try {
+            int value = ICJniUtils.isPPGavailable();
+            return new boolean[]{
+                    value > ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_NONE.ordinal(),
+                    value == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_GH301.ordinal()
+            };
+        } catch (Exception e) {
+            IcLog.e(TAG, "", e);
+            return new boolean[]{false, false};
+        }
+    }
+
     public static boolean isPPGavailable() {
         try {
             int value = ICJniUtils.isPPGavailable();