--- /dev/null
+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
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;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
+
+
ftManage = new FragmentManage(this, getSupportFragmentManager());
ftManage.showCurrMainFragment(isFinishing(), 0);
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;
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();
// 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"));
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"));
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"));
-#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