release ICL02Launcher V148
authorsnickersun <scy@incartech.cn>
Tue, 8 Sep 2020 12:12:26 +0000 (20:12 +0800)
committersnickersun <scy@incartech.cn>
Tue, 8 Sep 2020 12:12:26 +0000 (20:12 +0800)
支持心率、体温sensor 动态检测显示界面。这样可以一版软件兼容多种配置。

app/release/ICL02Launcher_V148_202009082009_release.apk [moved from app/release/ICL02Launcher_V147_202009081622_release.apk with 54% similarity]
app/src/main/java/com/ic/jni/ICJniUtils.java [new file with mode: 0644]
app/src/main/java/com/ic/launcher/MainActivity.java
app/src/main/java/com/ic/launcher/configure/l02/L02AppInfo.java
app/version_code.properties

similarity index 54%
rename from app/release/ICL02Launcher_V147_202009081622_release.apk
rename to app/release/ICL02Launcher_V148_202009082009_release.apk
index 15465b1..ec1af64 100644 (file)
Binary files a/app/release/ICL02Launcher_V147_202009081622_release.apk and b/app/release/ICL02Launcher_V148_202009082009_release.apk differ
diff --git a/app/src/main/java/com/ic/jni/ICJniUtils.java b/app/src/main/java/com/ic/jni/ICJniUtils.java
new file mode 100644 (file)
index 0000000..9062096
--- /dev/null
@@ -0,0 +1,241 @@
+package com.ic.jni;\r
+\r
+public class ICJniUtils {\r
+\r
+    public enum GSensorType\r
+    {\r
+        GSENSOR_TYPE_NONE,\r
+        GSENSOR_TYPE_QMA7981,\r
+        GSENSOR_TYPE_SC7A21,\r
+        GSENSOR_TYPE_MAX\r
+    };\r
+\r
+    public enum TempSensorType\r
+    {\r
+        TEMPSENSOR_TYPE_NONE,\r
+        TEMPSENSOR_TYPE_NST175,\r
+        TEMPSENSOR_TYPE_IC68,\r
+        TEMPSENSOR_TYPE_EM7068,\r
+        TEMPSENSOR_TYPE_MAX\r
+    };\r
+\r
+    public enum PPG_EGC_SensorType\r
+    {\r
+        PPG_EGC_TYPE_NONE,\r
+        PPG_EGC_TYPE_EM7028,\r
+        PPG_EGC_TYPE_EM7068,\r
+        PPG_EGC_TYPE_HRS3313,\r
+        PPG_EGC_TYPE_HRS3301,\r
+        PPG_EGC_TYPE_IC66,\r
+        PPG_EGC_TYPE_PAH8002,\r
+        PPG_EGC_TYPE_MAX\r
+    };\r
+\r
+    public ICJniUtils(){\r
+\r
+    }\r
+    static {\r
+        // build.gradle里面 android\defaultConfig\ndk\moduleName 的名称\r
+        // Android.mk, LOCAL_MODULE 的名称\r
+        System.loadLibrary("ICJniUtils");\r
+    }\r
+\r
+    /***************计步控制************************************/\r
+    /***\r
+     * 运行此函数清除 系统计步为0,一版在午夜执行\r
+     * @return\r
+     */\r
+    public static native int resetStepCount();\r
+\r
+    /***\r
+     * 获取当前步数\r
+     * @return\r
+     */\r
+    public static native int getStepCount();\r
+\r
+    /***\r
+     * 开启计步 不必判断返回值\r
+     * @return\r
+     */\r
+    public static native int enablePedometer();\r
+\r
+    /***\r
+     * 停止计步 不必判断返回值\r
+     * @return\r
+     */\r
+    public static native int disablePedometer();\r
+\r
+    /***\r
+     * 检测计步当前是否开启\r
+     * @return\r
+     * 1开启,0 关闭\r
+     */\r
+    public static native int isPedometerEnabled();\r
+\r
+    /***\r
+     * 获取当前计步器(GSensor)类型 GSensorType\r
+     * @return\r
+     * 不存在返回 GSENSOR_TYPE_NONE,否则返回Gsensor类型\r
+     * 理论上此设备必选,一定存在。\r
+     */\r
+    public static native int getGsensorType();\r
+\r
+    /*保存当前步数(getStepCount取得的值)到磁盘 不必判断返回值\r
+    * 为了兼容,已经不再使用\r
+    * */\r
+    public static native int saveStepCount();\r
+\r
+    /*恢复保存时的步数数据,下次getStepCount会在恢复的值上增加 不必判断返回值\r
+    * * 为了兼容,已经不再使用\r
+    * */\r
+    public static native int recoverStepCount();\r
+\r
+    /******心率,血压****************************************/\r
+     /***\r
+     * 检查 PPG硬件是否存在,返回PPG_EGC_SensorType\r
+     * @return\r
+      * 返回PPG_EGC_TYPE_NONE代表不存在,否则返回 传感器类型\r
+     */\r
+    public static native int isPPGavailable();\r
+\r
+     /**\r
+      * 开启心率血压检测\r
+     * @return\r
+      */\r
+    public static native int enablePPG();\r
+\r
+    /***\r
+     * 停止心率血压检测\r
+     * @return\r
+     */\r
+    public static native int disablePPG();\r
+\r
+\r
+    /***\r
+     * 返回PPG 运行状态, 0 停止, 1,运行中\r
+     * @return\r
+     */\r
+    public static native int isPPGStarted();\r
+\r
+    /***\r
+     * 返回 心率值 每分钟跳动次数, 通过这个心率>0 判断是否已经有检测结果,\r
+     * 有就可以直接通过getHighBloodPressure 和 getLowBloodPressure 获取血压高压低压值\r
+     * @return\r
+     */\r
+    public static native int getPPG();\r
+\r
+    /***\r
+     * 返回是否佩戴  0 未佩戴,1 佩戴 。\r
+     * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。\r
+     * @return\r
+     */\r
+    public static native int isWeared();\r
+\r
+    /***\r
+     * 获取血压高压值\r
+     * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。\r
+     * @return\r
+     */\r
+    public static native int getHighBloodPressure();\r
+\r
+    /***\r
+     * 获取血压低压值\r
+     * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。\r
+     * @return\r
+     */\r
+    public static native int getLowBloodPressure();\r
+\r
+      /***\r
+       * 获取血氧值\r
+     *  请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。\r
+     * @return\r
+       */\r
+    public static native int getSPO2();\r
+\r
+\r
+    /***\r
+     * 开始温度检测,有些sensor不需要,为了兼容,请开始前执行一次,并且sleep 1秒钟\r
+     * @return\r
+     */\r
+    public static native  int enableTemperature();\r
+\r
+    /***\r
+     * 停止温度检测,有些sensor不需要,为了兼容请结束后还是要执行一次。\r
+     * @return  返回值<0 表示失败 =>0表示成功\r
+     */\r
+    public static native int disableTemperature();\r
+\r
+    /***\r
+     * 检查体温检测设备是否开启\r
+     * @return  返回0 未开启 1 开启\r
+     */\r
+    public static native int isTemperatureDevOpened();\r
+    /***\r
+     * 执行温度校准操作,一版在整机生产时的恒温箱中执行\r
+     * @param refTemp  恒温箱的温度\r
+     * @return 返回值<0 表示失败 =>0表示成功\r
+     */\r
+    public static native int doTempCalibration(double refTemp);\r
+\r
+    /***\r
+     *  获取温度 校准后数据 单位摄氏度\r
+     * @return 返回值<=0 表示失败 >0表示成功\r
+     */\r
+    public static native double getTemperature();\r
+\r
+    /***\r
+     * 设置当前温度标志位,\r
+     * @param flag\r
+     * 实际上就是按照二进制位来定义的。\r
+     *     0、可以测温\r
+     *     第一位为1,0x1、充电超过2分钟或者充电超过2分钟后拔除5分钟内    0001\r
+     *     第二位为1,0x2、亮屏超过5分钟或者亮屏超过5分钟后灭屏5分钟内    0010\r
+     *     第三位为1,0x4、通话超过2分钟或者通话超过2分钟后挂断5分钟内    0100\r
+     *     所有大于0的都不能测温\r
+     * 注:暂时未启用,预留\r
+     * @return\r
+     */\r
+    public static native int setTemperatureValidFlag(int flag);\r
+\r
+     /***\r
+      * 此操作仅仅为了检查标志状态设置成功与否,标志已经在内部被使用\r
+      * 注:暂时未启用,预留\r
+     * @return\r
+      */\r
+    public static native int getTemperatureValidFlag();\r
+\r
+    /***\r
+     * 根据环境参考温度和腕温换算 体温\r
+     * ic66可以直接输出体温,不需要这个公式。\r
+     * @param wrist_temp\r
+     * 腕温\r
+     * @param ref_temp\r
+     * 室外参考温度\r
+     * @return 返回值<=0 表示失败 >0表示成功\r
+     */\r
+    public static native double getBodyTempFromWristTemp(double wrist_temp,double ref_temp);\r
+\r
+\r
+     /***\r
+      * 有体温检测功能则返回 TempSensorType\r
+      * TempSensor_NONE 就表示没有体温检测功能,否则返回温度传感器类型\r
+     * @return\r
+      */\r
+    public static native int isTemperatureDevAvailable();\r
+\r
+\r
+    /*获取温度校准前\r
+    * 为了兼容已经不用\r
+    * */\r
+    public static native double getTemperatureOrigin();\r
+\r
+    /*设置校准参数\r
+    *  * 为了兼容已经不用\r
+    * */\r
+    public static native int setTemperatureAdjustValue(double value);\r
+\r
+    /*设置校准参数\r
+    *  * 为了兼容已经不用\r
+    * */\r
+    public static native double getTemperatureAdjustValue();\r
+}\r
index 0d2dcba..9ddfc56 100644 (file)
@@ -20,6 +20,8 @@ import android.os.Handler;
 import android.os.Message;
 import android.view.KeyEvent;
 
+import com.ic.jni.ICJniUtils;
+import com.ic.launcher.configure.l02.L02AppInfo;
 import com.ic.launcher.fragment.dialog.ImageTipsFragment;
 import com.ic.launcher.fragment.LowPowerModeFragment;
 import com.ic.launcher.fragment.dialog.SlipTipsFragment;
@@ -60,6 +62,8 @@ public class MainActivity extends AppCompatActivity implements
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
+
+
         ftManage = new FragmentManage(this, getSupportFragmentManager());
         ftManage.showCurrMainFragment(isFinishing(), 0);
 
index 81d6010..d0a9c45 100644 (file)
@@ -3,6 +3,7 @@ package com.ic.launcher.configure.l02;
 import android.content.Context;
 import android.graphics.Color;
 
+import com.ic.jni.ICJniUtils;
 import com.ic.launcher.BuildConfig;
 import com.ic.launcher.R;
 import com.ic.launcher.entity.AppInfoEntity;
@@ -17,6 +18,16 @@ public class L02AppInfo {
 
     private static final int BACK_COLOUR = Color.parseColor("#000000");
 
+    public static boolean ppg_ecg_sensor_available=false;
+    public static boolean temperature_sensor_available=false;
+
+    static{
+        //动态监测有没有心率
+        ppg_ecg_sensor_available=(ICJniUtils.isPPGavailable()>0);
+        //动态监测有没有体温
+        temperature_sensor_available=(ICJniUtils.isTemperatureDevAvailable()>0);
+    }
+
     public static List<AppInfoEntity> getAppList(Context context){
         Locale locale = context.getResources().getConfiguration().locale;
         String language = locale.getLanguage();
@@ -53,11 +64,16 @@ public class L02AppInfo {
 //            add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_weather_l02, R.string.app_Weather,
 //                    "com.ic.weather", "com.ic.weather.WeatherActivity"));
             //心率
-            add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_heartrate_l02, R.string.app_name_heart,
-                    "com.ic.blood", "com.ic.blood.BloodActivity"));
 
-            add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_temperature_h88, R.string.app_h88_temperature,
-                    "com.ic.launcher", "com.ic.launcher.AnimalHeatActivity"));
+            if(ppg_ecg_sensor_available) {
+                add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_heartrate_l02, R.string.app_name_heart,
+                        "com.ic.blood", "com.ic.blood.BloodActivity"));
+            }
+            if(temperature_sensor_available) {
+                add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_temperature_h88, R.string.app_h88_temperature,
+                        "com.ic.launcher", "com.ic.launcher.AnimalHeatActivity"));
+            }
+
             //支付包
             add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_alipay_l02, R.string.app_AliPay,
                     "com.eg.android.AlipayGphone", "com.alipay.watch.ui.MainActivity"));
@@ -91,11 +107,15 @@ public class L02AppInfo {
             add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_pedometer_l02, R.string.app_Sport,
                     "com.ic.hardware", "com.ic.hardware.PedometerActivity"));
             //心率
-            add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_heartrate_l02, R.string.app_name_heart,
-                    "com.ic.blood", "com.ic.blood.BloodActivity"));
+            if(ppg_ecg_sensor_available) {
+                add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_heartrate_l02, R.string.app_name_heart,
+                        "com.ic.blood", "com.ic.blood.BloodActivity"));
+            }
 
-            add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_temperature_h88, R.string.app_h88_temperature,
-                    "com.ic.launcher", "com.ic.launcher.AnimalHeatActivity"));
+            if(temperature_sensor_available) {
+                add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_temperature_h88, R.string.app_h88_temperature,
+                        "com.ic.launcher", "com.ic.launcher.AnimalHeatActivity"));
+            }
             //相机
             add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_camera_l02, R.string.app_Camera,
                     "com.eqc.camera", "com.eqc.camera.TakePictureActivity"));
@@ -120,11 +140,15 @@ public class L02AppInfo {
             add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_qr_code_h88, R.string.app_h88_qrcode,
                     "com.ic.launcher", "com.ic.launcher.QrCodeActivity"));
 
-            add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_temperature_h88, R.string.app_h88_temperature,
-                    "com.ic.launcher", "com.ic.launcher.AnimalHeatActivity"));
+            if(temperature_sensor_available) {
+                add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_temperature_h88, R.string.app_h88_temperature,
+                        "com.ic.launcher", "com.ic.launcher.AnimalHeatActivity"));
+            }
             //心率
-            add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_heartrate_l02, R.string.app_name_heart,
-                    "com.ic.blood", "com.ic.blood.BloodActivity"));
+            if (ppg_ecg_sensor_available) {
+                add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_heartrate_l02, R.string.app_name_heart,
+                        "com.ic.blood", "com.ic.blood.BloodActivity"));
+            }
             //联系人
             add(new AppInfoEntity(BACK_COLOUR, R.mipmap.icon_contacts_l02, R.string.app_ContactName,
                     "com.enqualcomm.imessage", "com.enqualcomm.imessage.ui.PhoneDirectoryActivity"));
index cc9686e..f1d9612 100644 (file)
@@ -1,2 +1,2 @@
-#Tue Sep 08 16:22:52 CST 2020\r
-VERSION_CODE=147\r
+#Tue Sep 08 20:09:58 CST 2020\r
+VERSION_CODE=148\r