-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":28,"versionName":"202006261247","enabled":true,"outputFile":"FactoryMode_V28_202006261247_release.apk","fullName":"release","baseName":"release"},"path":"FactoryMode_V28_202006261247_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":37,"versionName":"202008101956","enabled":true,"outputFile":"FactoryMode_V37_202008101956_release.apk","fullName":"release","baseName":"release"},"path":"FactoryMode_V37_202008101956_release.apk","properties":{}}]
\ No newline at end of file
<action android:name="com.eqc.STARTTempAdjust" />
</intent-filter>
</activity>
+
+ <activity
+ android:name=".TemperatureActivity"
+ android:label="@string/temperature" />
<activity
android:name=".SimDetectActivity"
android:label="@string/detectSim" />
\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
}\r
\r
/***************计步控制************************************/\r
- /*运行此函数清除 系统计步为0*/\r
+ /***\r
+ * 运行此函数清除 系统计步为0,一版在午夜执行\r
+ * @return\r
+ */\r
public static native int resetStepCount();\r
\r
- /*获取当前步数*/\r
+ /***\r
+ * 获取当前步数\r
+ * @return\r
+ */\r
public static native int getStepCount();\r
- /*开启计步 不必判断返回值*/\r
+\r
+ /***\r
+ * 开启计步 不必判断返回值\r
+ * @return\r
+ */\r
public static native int enablePedometer();\r
- /*停止计步 不必判断返回值*/\r
+\r
+ /***\r
+ * 停止计步 不必判断返回值\r
+ * @return\r
+ */\r
public static native int disablePedometer();\r
\r
- /*检测计步当前是否开启 1开启,0 关闭*/\r
+ /***\r
+ * 检测计步当前是否开启\r
+ * @return\r
+ * 1开启,0 关闭\r
+ */\r
public static native int isPedometerEnabled();\r
\r
- /*保存当前步数(getStepCount取得的值)到磁盘 不必判断返回值*/\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
+ /*恢复保存时的步数数据,下次getStepCount会在恢复的值上增加 不必判断返回值\r
+ * * 为了兼容,已经不再使用\r
+ * */\r
public static native int recoverStepCount();\r
\r
-\r
/******心率,血压****************************************/\r
- /*检查 PPG硬件是否存在,返回 1 存在,0 不存在*/\r
+ /***\r
+ * 检查 PPG硬件是否存在,返回PPG_EGC_SensorType\r
+ * @return\r
+ * 返回PPG_EGC_TYPE_NONE代表不存在,否则返回 传感器类型\r
+ */\r
public static native int isPPGavailable();\r
\r
- /*开启心率血压检测*/\r
+ /**\r
+ * 开启心率血压检测\r
+ * @return\r
+ */\r
public static native int enablePPG();\r
\r
- /*停止心率血压检测*/\r
+ /***\r
+ * 停止心率血压检测\r
+ * @return\r
+ */\r
public static native int disablePPG();\r
- /*返回 心率值 每分钟跳动次数, 通过这个心率>0 判断是否已经有检测结果,\r
- 有就可以直接通过getHighBloodPressure 和 getLowBloodPressure 获取血压高压低压值*/\r
- public static native int getPPG();\r
- /* 返回PPG 运行状态, 0 停止, 1,运行中*/\r
+\r
+\r
+ /***\r
+ * 返回PPG 运行状态, 0 停止, 1,运行中\r
+ * @return\r
+ */\r
public static native int isPPGStarted();\r
- /*返回是否佩戴 0 未佩戴,1 佩戴*/\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
+ * 获取血压高压值\r
+ * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。\r
+ * @return\r
+ */\r
public static native int getHighBloodPressure();\r
\r
- /*获取血压低压值*/\r
+ /***\r
+ * 获取血压低压值\r
+ * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。\r
+ * @return\r
+ */\r
public static native int getLowBloodPressure();\r
\r
- /*获取血氧值*/\r
+ /***\r
+ * 获取血氧值\r
+ * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。\r
+ * @return\r
+ */\r
public static native int getSPO2();\r
\r
\r
- /*获取温度校准后= getTemperatureOrigin - adjustValue */\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
- public static native double getTemperatureOrigin();\r
-\r
- /*设置校准参数*/\r
- public static native int setTemperatureAdjustValue(double value);\r
-\r
- /*设置校准参数*/\r
- public static native double getTemperatureAdjustValue();\r
-\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
+ * 设置当前温度标志位,\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
+ * 注:暂时未启用,预留\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
package mobile.miki;\r
\r
import android.content.Intent;\r
+import android.hardware.Sensor;\r
+import android.hardware.SensorEvent;\r
+import android.hardware.SensorEventListener;\r
+import android.hardware.SensorManager;\r
import android.os.Bundle;\r
import android.os.Handler;\r
import android.os.Message;\r
import mobile.miki.util.Config;\r
import mobile.miki.util.Logger;\r
\r
-public class HeartRate extends BaseActivity implements View.OnClickListener {\r
+public class HeartRate extends BaseActivity implements View.OnClickListener, SensorEventListener {\r
\r
private ButtonViewTwo buttonView;\r
boolean running;\r
-\r
+ public static final int TYPE_HEART_RATE = 21;\r
Timer mTimer=null;\r
\r
private TextView tv_isweared;\r
private TextView tv_ppg;\r
- private TextView tv_temperature;\r
+ private int hrsType;\r
+ private SensorManager mSensorManager=null;\r
+ private Sensor mHeartRate=null;\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
setContentView(R.layout.heartrate_layout);\r
initView();\r
- int heartrate = ICJniUtils.isPPGavailable();\r
- Log.i("dxc", "heartrate available : " + heartrate);\r
-\r
- mTimer=new Timer();\r
- TimerTask HRTimerTask=new TimerTask() {\r
- @Override\r
- public void run() {\r
- mhandler.sendEmptyMessage(0);\r
- }\r
- };\r
- mTimer.schedule(HRTimerTask,0,1000L);\r
+ int hrsType = ICJniUtils.isPPGavailable();\r
+ Log.i("dxc", "heartrate available : " + hrsType);\r
+ if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {\r
+\r
+ mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);\r
+ mHeartRate = mSensorManager.getDefaultSensor(TYPE_HEART_RATE);\r
+ boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_UI);\r
+ Log.i( "dxc","Heart Rate PPG_EGC_TYPE_IC66 opened ret :: " + ret);\r
+\r
+ } else {\r
+ mTimer = new Timer();\r
+ TimerTask HRTimerTask = new TimerTask() {\r
+ @Override\r
+ public void run() {\r
+ mhandler.sendEmptyMessage(0);\r
+ }\r
+ };\r
+ mTimer.schedule(HRTimerTask, 0, 1000L);\r
+ }\r
}\r
\r
Handler mhandler=new Handler(new Handler.Callback() {\r
@Override\r
public boolean handleMessage(Message message) {\r
\r
- if (ICJniUtils.isPPGStarted()==0){\r
- ICJniUtils.enablePPG();\r
+ if(ICJniUtils.isPPGavailable()>0) {\r
+ if (ICJniUtils.isPPGStarted()==0){\r
+ ICJniUtils.enablePPG();\r
+\r
+ }\r
+ int ppg = ICJniUtils.getPPG();\r
+ int weared = ICJniUtils.isWeared();\r
+\r
+ String wearedstr = String.valueOf(weared);\r
+ String ppgstr = String.valueOf(ppg);\r
+\r
+ tv_isweared.setText(wearedstr);\r
+ tv_ppg.setText(ppgstr);\r
\r
+ Log.d("dxc","Weared:" + wearedstr + " PPG:" + ppgstr );\r
+ }else{\r
+ tv_isweared.setText(HeartRate.this.getResources().getString(R.string.no_heartrate));\r
+ tv_ppg.setText("");\r
}\r
- int ppg=ICJniUtils.getPPG();\r
- int weared=ICJniUtils.isWeared();\r
- double temp=ICJniUtils.getTemperature();\r
- double adjust=ICJniUtils.getTemperatureAdjustValue();\r
- String wearedstr=String.valueOf(weared);\r
- String ppgstr=String.valueOf(ppg);\r
- String tempstr=String.format("%1$.2f",temp);\r
- tempstr=tempstr+" ("+String.format("%1$.2f",adjust)+")";\r
- tv_isweared.setText(wearedstr);\r
- tv_ppg.setText(ppgstr);\r
- tv_temperature.setText(tempstr);\r
- Logger.d("Weared:"+wearedstr+" PPG:"+ppgstr+" Temperature:"+tempstr);\r
return false;\r
}\r
});\r
@Override\r
protected void onDestroy() {\r
super.onDestroy();\r
- ICJniUtils.disablePPG();\r
- if(mTimer!=null) {\r
-\r
- mTimer.cancel();\r
- mTimer=null;\r
+ if ( hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {\r
+ mSensorManager.unregisterListener(this);\r
+ Log.i( "dxc","Heart Rate PPG_EGC_TYPE_IC66 closed");\r
+ }else if(hrsType>0) {\r
+\r
+ ICJniUtils.disablePPG();\r
+ if(mTimer!=null) {\r
+ mTimer.cancel();\r
+ mTimer=null;\r
+ }\r
}\r
}\r
\r
\r
tv_isweared=(TextView)findViewById(R.id.tv_weared_value);\r
tv_ppg=(TextView)findViewById(R.id.tv_ppg_value);\r
- tv_temperature=(TextView)findViewById(R.id.tv_temperature_value);\r
\r
}\r
\r
} else {\r
startActivity(intent);\r
}\r
- PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "true")\r
- .commit();\r
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "true").commit();\r
finish();\r
break;\r
case R.id.btn_two_right:\r
} else {\r
startActivity(intent);\r
}\r
- PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "false")\r
- .commit();\r
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "false").commit();\r
finish();\r
break;\r
}\r
}\r
+\r
+ @Override\r
+ public void onSensorChanged(SensorEvent sensorEvent) {\r
+ float values[]=sensorEvent.values;\r
+ int length = values.length;\r
+ Log.i( "dxc","onSensorChanged() is called "+length\r
+ +" PPG = "+values[0]\r
+ +", BPH = "+values[1]\r
+ +", BPL = "+values[2]\r
+ +", spo2 = "+values[3]\r
+ +" , Weared = "+values[4]\r
+ );\r
+\r
+ int PPG = (int)values[0];//调用底层函数保证状态更新。\r
+ boolean isWared = ((int)values[4] == 2);\r
+ tv_isweared.setText(isWared?1:0);\r
+ tv_ppg.setText(PPG);\r
+ /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/\r
+ }\r
+\r
+ @Override\r
+ public void onAccuracyChanged(Sensor sensor, int i) {\r
+ Log.i("dxc","onAccuracyChanged() is called "+sensor.getName()+" accuracy="+i);\r
+ }\r
}\r
--- /dev/null
+package mobile.miki;\r
+\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.os.Handler;\r
+import android.os.Message;\r
+import android.preference.PreferenceManager;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.widget.TextView;\r
+\r
+import com.ic.jni.ICJniUtils;\r
+\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
+\r
+import mobile.miki.mainui.ButtonViewTwo;\r
+import mobile.miki.mainui.TestMainActivity;\r
+import mobile.miki.util.Config;\r
+import mobile.miki.util.Logger;\r
+\r
+public class TemperatureActivity extends BaseActivity implements View.OnClickListener {\r
+\r
+ private ButtonViewTwo buttonView;\r
+ boolean running;\r
+\r
+ Timer mTimer=null;\r
+\r
+ private TextView tv_temperature;\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.temperature_layout);\r
+ initView();\r
+ int temper = ICJniUtils.isTemperatureDevAvailable();\r
+ Log.i("dxc", "Temperature available : " + temper);\r
+\r
+ if (temper>0){\r
+ ICJniUtils.enableTemperature();\r
+ mTimer=new Timer();\r
+ TimerTask HRTimerTask=new TimerTask() {\r
+ @Override\r
+ public void run() {\r
+ mhandler.sendEmptyMessage(0);\r
+ }\r
+ };\r
+ mTimer.schedule(HRTimerTask,500,1000L);\r
+\r
+ }else{\r
+ this.tv_temperature.setText(this.getResources().getString(R.string.no_temperature));\r
+ Log.i("dxc","No temperature!");\r
+ }\r
+ }\r
+\r
+ Handler mhandler=new Handler(new Handler.Callback() {\r
+ @Override\r
+ public boolean handleMessage(Message message) {\r
+\r
+\r
+ double temp=ICJniUtils.getTemperature();\r
+ //double adjust=ICJniUtils.getTemperatureAdjustValue();\r
+\r
+ String tempstr=String.format("%1$.2f",temp);\r
+ // tempstr=tempstr+" ("+String.format("%1$.2f",adjust)+")";\r
+\r
+ tv_temperature.setText(tempstr);\r
+ Logger.d("Temperature:"+tempstr);\r
+ return false;\r
+ }\r
+ });\r
+ @Override\r
+ protected void onDestroy() {\r
+ super.onDestroy();\r
+ // ICJniUtils.disablePPG();\r
+\r
+ int temper = ICJniUtils.isTemperatureDevAvailable();\r
+ Log.i("dxc", "Temperature available : " + temper);\r
+\r
+ if (temper>0) {\r
+ if(mTimer!=null) {\r
+\r
+ mTimer.cancel();\r
+ mTimer=null;\r
+ }\r
+ ICJniUtils.disableTemperature();\r
+ }else{\r
+ Log.i("dxc","No temperature!");\r
+ }\r
+\r
+ }\r
+\r
+\r
+\r
+ private void initView() {\r
+ buttonView = (ButtonViewTwo) findViewById(R.id.btn_set);\r
+ buttonView.btn_left.setOnClickListener(this);\r
+ buttonView.btn_right.setOnClickListener(this);\r
+ buttonView.setSuccessColor();\r
+ buttonView.btn_left.setClickable(true);\r
+ tv_temperature=(TextView)findViewById(R.id.tv_temperature_value);\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+ Intent intent = Config.getNextTestIntent(this,this.getClass());//new Intent(this, SimDetectActivity.class);\r
+ intent.putExtra("running", true);\r
+ Intent intent1 = new Intent(this, TestMainActivity.class);\r
+ // TestResult testResult = (TestResult) getApplicationContext();\r
+ switch (view.getId()) {\r
+\r
+ case R.id.btn_two_left:\r
+ if (!running) {\r
+ startActivity(intent1);\r
+ } else {\r
+ startActivity(intent);\r
+ }\r
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("temperature", "true").commit();\r
+ finish();\r
+ break;\r
+ case R.id.btn_two_right:\r
+ if (!running) {\r
+ startActivity(intent1);\r
+ } else {\r
+ startActivity(intent);\r
+ }\r
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("temperature", "false").commit();\r
+ finish();\r
+ break;\r
+ }\r
+ }\r
+}\r
package mobile.miki;\r
\r
+import android.app.Activity;\r
import android.content.Context;\r
import android.content.Intent;\r
import android.hardware.Sensor;\r
import java.io.IOException;\r
import java.util.Timer;\r
import java.util.TimerTask;\r
+import java.util.concurrent.TimeUnit;\r
\r
import mobile.miki.mainui.ButtonViewTwo;\r
import mobile.miki.mainui.TestMainActivity;\r
import mobile.miki.mainui.TestMainList;\r
import mobile.miki.util.Config;\r
import mobile.miki.util.Logger;\r
+import rx.Observable;\r
+import rx.functions.Action1;\r
\r
-public class TemperatureAdjustActivity extends BaseActivity implements View.OnClickListener {\r
+import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;\r
+import static android.os.PowerManager.SCREEN_DIM_WAKE_LOCK;\r
+\r
+public class TemperatureAdjustActivity extends Activity implements View.OnClickListener {\r
\r
private ButtonViewTwo buttonView;\r
boolean running;\r
setContentView(R.layout.temperature_adjust_layout);\r
initView();\r
\r
- timestamp_start=System.currentTimeMillis();\r
- mTestTimer=new Timer();\r
- TimerTask HRTimerTask=new TimerTask() {\r
- @Override\r
- public void run() {\r
- mhandler.sendEmptyMessage(0);\r
- }\r
- };\r
- mTestTimer.schedule(HRTimerTask,0,1000L);\r
+ if (ICJniUtils.isTemperatureDevAvailable()>0) {\r
+ ICJniUtils.enableTemperature();\r
+ timestamp_start = System.currentTimeMillis();\r
+ mTestTimer = new Timer();\r
+ TimerTask HRTimerTask = new TimerTask() {\r
+ @Override\r
+ public void run() {\r
+ mhandler.sendEmptyMessage(0);\r
+ }\r
+ };\r
+ mTestTimer.schedule(HRTimerTask, 500, 1000L);\r
+ }else{\r
+ Log.i("dxc","");\r
+ }\r
//startSensor();\r
}\r
\r
Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);\r
\r
if (mSensorManager == null || mSensor == null) {\r
- Log.d("近距离","设备不支持1");\r
+ Log.d("dxc","近距离 设备不支持1");\r
return;\r
//throw new UnsupportedOperationException("设备不支持");\r
}\r
boolean isRegister = mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_NORMAL);\r
if (!isRegister) {\r
//throw new UnsupportedOperationException("设备不支持");\r
- Log.d("近距离","设备不支持2");\r
+ Log.d("dxc","近距离 设备不支持2");\r
return ;\r
}\r
}\r
@Override\r
public void onSensorChanged(SensorEvent sensorEvent) {\r
float proximity=sensorEvent.values[0];\r
- Log.d("近距离", String.valueOf(proximity));\r
+ Log.d("dxc", "近距离 "+String.valueOf(proximity));\r
}\r
\r
@Override\r
@Override\r
protected void onResume() {\r
super.onResume();\r
- if (screenOnWakelock==null)\r
- screenOnWakelock = getScreenOnWakeLock(this,TemperatureAdjustActivity.class.getSimpleName());\r
\r
}\r
public static PowerManager.WakeLock getScreenOnWakeLock(Context context, String tag) {\r
- PowerManager.WakeLock wakeLock = ((PowerManager)(context.getSystemService(Context.POWER_SERVICE))).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, tag);\r
+ final PowerManager.WakeLock wakeLock = ((PowerManager)context.getSystemService(Context.POWER_SERVICE)).newWakeLock(ACQUIRE_CAUSES_WAKEUP| SCREEN_DIM_WAKE_LOCK, TemperatureAdjustActivity.class.getSimpleName());\r
wakeLock.acquire();\r
return wakeLock;\r
}\r
Handler mhandler=new Handler(new Handler.Callback() {\r
@Override\r
public boolean handleMessage(Message message) {\r
- double temp = ICJniUtils.getTemperatureOrigin();\r
+ double temp = ICJniUtils.getTemperature();\r
String tempstr = String.format("%1$.2f", temp);\r
tv_temperature.setText(tempstr);\r
- Logger.d("Temperature:" + tempstr);\r
+ Log.d("dxc","Temperature:" + tempstr);\r
String header = "体温校准开始,请放置在37摄氏度恒温箱中。剩余 ";\r
String tail = "秒。。。";\r
long time_cost = (System.currentTimeMillis() - timestamp_start) / 1000;\r
adjust_start_seconds_left = (adjust_timeout_time - time_cost);\r
if (adjust_start_seconds_left == 0) {\r
\r
- tv_mesg.setText("体温校准完毕,偏差数据"+String.format("%1$.2f",(avg_temp-37.0f))+"摄氏度!");\r
+ int ret= ICJniUtils.doTempCalibration(37.0f);\r
+ tv_mesg.setText("体温校准完毕,偏差数据"+String.format("%1$.2f",(avg_temp-37.0f))+"摄氏度!ret "+ret);\r
+\r
if(mTestTimer!=null) {\r
mTestTimer.cancel();\r
mTestTimer=null;\r
}\r
\r
+ //检测完毕亮屏查看结果。\r
+ if (screenOnWakelock==null)\r
+ screenOnWakelock = getScreenOnWakeLock(TemperatureAdjustActivity.this,TemperatureAdjustActivity.class.getSimpleName());\r
+\r
}else{\r
\r
if(adjust_start_seconds_left <=5 && adjust_start_seconds_left > 0) {\r
}\r
\r
\r
-\r
private void initView() {\r
buttonView = (ButtonViewTwo) findViewById(R.id.btn_set);\r
buttonView.btn_left.setOnClickListener(this);\r
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
import mobile.miki.BaseActivity;
import mobile.miki.BatteryTestActivity;
import mobile.miki.RingtoneActivity;\r
import mobile.miki.SimDetectActivity;\r
import mobile.miki.SystemMemory;\r
+import mobile.miki.TemperatureActivity;\r
import mobile.miki.TouchTest;\r
import mobile.miki.UltravioletMonitorActivity;\r
import mobile.miki.VersionActivity;\r
return context.getResources().getString(R.string.dsp);\r
}else if (ClassName.equals(HeartRate.class.getSimpleName())){\r
return context.getResources().getString(R.string.heartrate);\r
+ }else if (ClassName.equals(TemperatureActivity.class.getSimpleName())){\r
+ return context.getResources().getString(R.string.temperature);\r
}else {\r
\r
return null;\r
intent = new Intent(context, DSPActivity.class);\r
}else if (testItemName.equals(context.getResources().getString(R.string.heartrate))) {\r
intent = new Intent(context, HeartRate.class);\r
+ }else if (testItemName.equals(context.getResources().getString(R.string.temperature))) {\r
+ intent = new Intent(context, TemperatureActivity.class);\r
}\r
\r
if (intent != null) {\r
\r
//list.add(context.getString(R.string.test_keypad));\r
list.add(context.getString(R.string.heartrate));\r
+ list.add(context.getString(R.string.temperature));\r
list.remove(context.getString(R.string.camera));\r
//testResultList.add("keys");\r
testResultList.add("heartrate");\r
+ testResultList.add("temperature");\r
testResultList.remove("camera");\r
}\r
stateArr = new String[testResultList.size()];\r
\r
public static boolean isQ3F(){\r
\r
- if (getMODEL().contains("C41-QL02")||getMODEL().contains("C41S-QL02")|| SystemProperties.get("ro.product.isQ3F","").equalsIgnoreCase("true")) {\r
+ if (getMODEL().contains("C41-QL02")||getMODEL().contains("C41S-QL02")|| SystemProperties.get("ro.product.isQ3F","").equalsIgnoreCase("true") || SystemProperties.get("persist.sys.id_num","").equalsIgnoreCase("q3f")) {\r
return true;\r
}\r
return false;\r
}\r
public static boolean isH88(){\r
\r
- if (getMODEL().contains("H88")||SystemProperties.get("ro.product.isH88","").equalsIgnoreCase("true")) {\r
+ if (getMODEL().contains("H88")||SystemProperties.get("ro.product.isH88","").equalsIgnoreCase("true") || SystemProperties.get("persist.sys.id_num","").equalsIgnoreCase("H88") ) {\r
return true;\r
}\r
return false;\r
android:id="@+id/tv_isweared"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
- android:text="佩戴 "\r
+ android:text="@string/isWeared"\r
android:textSize="36sp" />\r
\r
<TextView\r
android:id="@+id/tv_ppg"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
- android:text="心率 "\r
+ android:text="@string/heartrate"\r
android:textSize="36sp" />\r
\r
<TextView\r
android:textSize="36sp" />\r
</LinearLayout>\r
\r
- <LinearLayout\r
- android:layout_width="match_parent"\r
- android:layout_height="match_parent"\r
- android:orientation="horizontal">\r
-\r
- <TextView\r
- android:id="@+id/tv_temperature"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:text="体温 "\r
- android:textSize="36sp" />\r
-\r
- <TextView\r
- android:id="@+id/tv_temperature_value"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:text="0"\r
- android:textSize="36sp" />\r
- </LinearLayout>\r
-\r
</LinearLayout>\r
\r
<mobile.miki.mainui.ButtonViewTwo\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ android:orientation="vertical" android:layout_width="match_parent"\r
+ android:layout_height="match_parent">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:orientation="horizontal">\r
+\r
+ <TextView\r
+ android:id="@+id/tv_temperature"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="@string/temperature"\r
+ android:textSize="36sp" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView9"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_weight="1"\r
+ android:text=":" />\r
+\r
+ <TextView\r
+ android:id="@+id/tv_temperature_value"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="0"\r
+ android:textSize="36sp" />\r
+ </LinearLayout>\r
+\r
+ </LinearLayout>\r
+\r
+ <mobile.miki.mainui.ButtonViewTwo\r
+ android:id="@+id/btn_set"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:layout_alignParentBottom="true"\r
+ android:layout_centerHorizontal="true" >\r
+ </mobile.miki.mainui.ButtonViewTwo>\r
+\r
+</RelativeLayout>
\ No newline at end of file
<string name="more">更多设置</string>\r
<string name="unbound">解绑</string>\r
<string name="tempAdjust">温度校准</string>\r
+ <string name="temperature">温度测试</string>\r
+ <string name="no_temperature">没发现测温设备!</string>\r
\r
<string name="startRecord">开始录音</string>\r
<string name="stopRecord">结束录音</string>\r
<string name="bluethooth_mac_addaress">Bluetooth mac</string>\r
<string name="barcode">barcode</string>\r
<string name="flag_position">标志位检查</string>\r
+ <string name="isWeared">佩戴</string>\r
<string name="heartrate">心率</string>\r
+\r
+ <string name="no_heartrate">无心率设备!</string>\r
+\r
<!-- add end -->\r
\r
</resources>
\ No newline at end of file
<string name="beiguang_new">Backlight</string>\r
<string name="gps">GPS</string>\r
<string name="tempAdjust">Temperature Adjust 温度校准</string>\r
+ <string name="temperature">Temperature</string>\r
+ <string name="no_temperature">No Temperature device found!</string>\r
+\r
<string name="startRecord">Start recording</string>\r
<string name="stopRecord">Stop recording</string>\r
<string name="startPlay">Start playing</string>\r
<string name="flag_position">标志位检查</string>\r
<string name="dsp">DSP</string>\r
<string name="change_camera">change</string>\r
+ <string name="isWeared">isWeared</string>\r
<string name="heartrate">HeartRate</string>\r
+ <string name="no_heartrate">No HeartRate device found!</string>\r
+\r
<string name="hall">hall</string>\r
</resources>\r
-#Tue Jul 28 05:58:09 CST 2020\r
-VERSION_CODE=33\r
+#Mon Aug 10 19:56:33 CST 2020\r
+VERSION_CODE=37\r