<action android:name="android.intent.action.BATTERY_LOW" />
<action android:name="com.enqualcomm.support.ACTION_MISSED_CALL_GET" />
<action android:name="com.enqualcomm.support.ACTION_CHECK_SERVER_RESPONSE" />
+ <action android:name="com.enqualcomm.support.ACTION_LED" />
+ <action android:name="com.ic.action.shutdown" />
+ <action android:name="com.ic.action.playtime" />
<action android:name="com.enqualcomm.support.ACTION_RETRY_SERVER_CONNECT" />
<action android:name="com.enqualcomm.support.ACTION_CHECK_LOCATION_RESULT" />
<!-- <action android:name="com.eqc.heartrate.action.SILENT_START" /> -->
import org.json.JSONException;\r
import org.json.JSONStringer;\r
\r
+import static com.enqualcomm.support.utils.Util.getSystemProperties;\r
+\r
public class Config {\r
public static final boolean LOG_TOFILE=true;\r
public static int antioff = 0;\r
.key("sw_version").value("eiot_V1.0.0")\r
.key("protocol_version").value("2.0")\r
.key("product").value(2L)\r
- .key("sim").value(1L)\r
- .key("connect").value(1L)\r
- .key("work_mode").value(work_mode)\r
- .key("phonebook").value(1L)\r
- .key("wifi").value(2L)\r
- .key("pedometer").value(1L)\r
- .key("wechat").value(1L)\r
- .key("shake").value(1L)\r
- .key("antioff").value(antioff)\r
- .key("key_num").value(1L)\r
- .key("kindness_num").value(0L)\r
- .key("sos_num").value(0L)\r
- .key("monitor_num").value(0L)\r
- .key("other_contact_num").value(30L)\r
- .key("volume").value(0L)\r
- .key("ring_vol").value(2L)\r
- .key("call_vol").value(2L)\r
- .key("Schedule_powonoff").value(0L)\r
- .key("temperature").value(0L)\r
- .key("air_pressure").value(0L)\r
- .key("dampness").value(0L)\r
- .key("BT").value("1@4.0")\r
- .key("TP").value(1L)\r
- .key("camera").value("1@200")\r
- .key("T_Card").value(0L)\r
- .key("NFC").value(0L)\r
- .key("wireless_charge").value(0L)\r
- .key("geomagnetic").value(0L)\r
- .key("gyroscope").value(0L)\r
- .key("behavior_mode").value(0L)\r
- .key("LBS").value(1L)\r
- .key("monitor").value(1L)\r
- .key("check_bill").value(1L)\r
- .key("sndrec").value(0L)\r
- .key("voice_control").value(0L)\r
- .key("market").value("domestic")\r
- .key("platform").value("SC9820E")\r
- .key("LCD").value("OLED@240X206")\r
- .key("communication_standard").value(1L)\r
- .key("time_set").value(0L)\r
- .key("language").value("0@0")\r
- .key("mcc_mnc").value("46000")\r
- .key("end_call").value(0L)\r
- .key("multi_point").value(0L)\r
- .key("make_call").value(1L)\r
- .key("search_terminal").value(1L)\r
- .key("alarm").value(1L)\r
- .key("silent").value(1L)\r
- .key("weather").value(1L)\r
- .key("url_download").value(1L)\r
- .key("shutdown_hand").value(1L)\r
- .key("relation").value(0L)\r
- .key("voice_notice").value(1L)\r
- .key("q_a").value(1L)\r
- .key("gps").value(1L)\r
- .key("gsensor").value(1L)\r
- .key("reboot").value(1L)\r
- .key("relatives").value(1L)\r
- .key("heart_rate").value(heart_rate)\r
- .key("sedentary_reminder").value(0L)\r
- .key("fight_mode").value(0L)\r
- .key("sleep_monitor").value(0L)\r
- .key("sms_forward").value(0L)\r
- .key("video_jf").value(1L)\r
- .key("nickname").value(0L)\r
- .key("wifi_setting").value(1L)\r
- .key("yunosuuid").value(0L)\r
- .key("oss_file").value(0L)\r
.key("swReleaseNo").value(sw_release_no)\r
.endObject().toString();\r
} catch (JSONException jSONException) {\r
return json;\r
}\r
\r
+ public final static boolean isL03Tracker=getIsL03tracker();\r
public final static boolean upload_logs_via_ftp=false;\r
final static String KeyProtocolServerIP="ProtocolServerIP";\r
final static String KeyProtocolServerHOST="ProtocolServerHOST";\r
final static String KeyWiFiPasswd="WiFiPWD";\r
final static String KeyWiFiEncyptType="WiFiEncryptType";\r
\r
+\r
+ public static boolean getIsL03tracker(){\r
+ boolean ret=getSystemProperties("persist.sys.isL03tracker").toLowerCase().equals("true");\r
+ return ret;\r
+ }\r
public static String getWiFiSSID(Context context){\r
return SharPreferenceUtil.getPrefString(context,KeyWiFiSSID,DefaultWiFiSSID);\r
}\r
\r
public interface Constants {\r
\r
+ public static final String ACTION_LED = "com.enqualcomm.support.ACTION_LED";\r
+\r
+ public static final String ACTION_SHUTDOWN = "com.ic.action.shutdown";\r
+\r
+ public static final String ACTION_PLAYTIME = "com.ic.action.playtime";\r
+\r
public static final String ACTION_BROADCAST_PPG = "com.enqualcomm.support.ACTION_BROADCAST_PPG";\r
public static final String ACTION_ADDTEST_CONTACTS = "com.enqualcomm.imessage.ACTION_ADDTEST_CONTACTS";\r
\r
import com.enqualcomm.support.bean.ICLocation;\r
import com.enqualcomm.support.bean.StepCount;\r
import com.enqualcomm.support.utils.DeviceInfoUtil;\r
+import com.enqualcomm.support.utils.LedUtil;\r
import com.enqualcomm.support.utils.ServiceUtil;\r
import com.enqualcomm.support.utils.StorageUtils;\r
import com.enqualcomm.support.utils.VibrateUtil;\r
boolean charging = batteryUtil.isPowerConnected(this);\r
runtime.setPowerConnected(charging);\r
ICLogger.i("Charging "+charging);\r
+// LedUtil.setRedLedOn(false);\r
+ if (Config.isL03Tracker){\r
\r
+ if (runtime.isPowerConnected()) {\r
+ LedUtil.setRedLedOn(true);\r
+ }else{\r
+ LedUtil.setRedLedOn(false);\r
+ }\r
+ }\r
//api直接获取batterylevel取消注册 receiver, 需要重新注册一下。\r
\r
batteryUtil.registerBroadReceiver();\r
paramRuntime.setShutdown(true);\r
Observable.timer(60000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
public void call(Long param1Long) {\r
- paramRuntime.getContextProxy().shutdown();\r
+ Util.shutdown();\r
}\r
});\r
return true;\r
} else if ("FactoryReset".equals(paramStringMessage.cmd())) {\r
Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
public void call(Long param1Long) {\r
- paramRuntime.getContextProxy().doMasterClear();\r
+ Util.doMasterClear(paramRuntime.getContextProxy().context);\r
}\r
});\r
return true;\r
\r
Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
public void call(Long param1Long) {\r
- paramRuntime.getContextProxy().reboot();\r
+ Util.reboot(paramRuntime.getContextProxy().context);\r
}\r
});\r
return true;\r
break;\r
case BATTERY_STATUS_FULL:\r
msg.append("BATTERY_STATUS_FULL ");\r
+ if (Config.isL03Tracker){\r
+ LedUtil.setRedLedOn(false);\r
+ LedUtil.setBlueLedOn(true);\r
+ }\r
break;\r
case BATTERY_STATUS_NOT_CHARGING:\r
msg.append("BATTERY_STATUS_NOT_CHARGING ");\r
ICLogger.i("ACTION_POWER_CONNECTED !");\r
mRuntime.setPowerConnected(true);\r
if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","ACTION_POWER_CONNECTED!");\r
+ if (Config.isL03Tracker){\r
+ LedUtil.setRedLedOn(true);\r
+ }\r
\r
}else if (Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction())){\r
ICLogger.i("ACTION_POWER_DISCONNECTED!");\r
mRuntime.setPowerConnected(false);\r
if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","ACTION_POWER_DISCONNECTED !");\r
\r
+ if (Config.isL03Tracker){\r
+ LedUtil.setRedLedOn(false);\r
+ }\r
}\r
}\r
};\r
this.context.sendBroadcast(intent, "com.eqc.broadcast.permission");\r
}\r
\r
- public void reboot() {\r
- PowerManager powerManager = (PowerManager)this.context.getSystemService(Context.POWER_SERVICE);\r
- try {\r
- powerManager.reboot("remote reboot");\r
- ICLogger.i("命令重启");\r
- return;\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- return;\r
- }\r
- }\r
-\r
-\r
- public void shutdown() {\r
- try {\r
-\r
- //获得ServiceManager类\r
- Class ServiceManager = Class\r
- .forName("android.os.ServiceManager");\r
-\r
- //获得ServiceManager的getService方法\r
- Method getService = ServiceManager.getMethod("getService", java.lang.String.class);\r
-\r
- //调用getService获取RemoteService\r
- Object oRemoteService = getService.invoke(null, Context.POWER_SERVICE);\r
-\r
- //获得IPowerManager.Stub类\r
- Class cStub = Class\r
- .forName("android.os.IPowerManager$Stub");\r
- //获得asInterface方法\r
- Method asInterface = cStub.getMethod("asInterface", android.os.IBinder.class);\r
- //调用asInterface方法获取IPowerManager对象\r
- Object oIPowerManager = asInterface.invoke(null, oRemoteService);\r
- //获得shutdown()方法\r
- Method shutdown = oIPowerManager.getClass().getMethod("shutdown",boolean.class,boolean.class);\r
- //调用shutdown()方法\r
- shutdown.invoke(oIPowerManager,false,true);\r
-\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";\r
- public static final String EXTRA_REASON = "android.intent.extra.REASON";\r
- public static final String EXTRA_WIPE_EXTERNAL_STORAGE = "android.intent.extra.WIPE_EXTERNAL_STORAGE";\r
-\r
- public void doMasterClear() {\r
- Intent intent = new Intent(ACTION_MASTER_CLEAR);\r
- intent.setPackage("android");\r
- intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);\r
- intent.putExtra(EXTRA_REASON, "MasterClearConfirm");\r
- if (Environment.isExternalStorageRemovable()) {\r
- intent.putExtra(EXTRA_WIPE_EXTERNAL_STORAGE, true);\r
- }else\r
- {\r
- intent.putExtra(EXTRA_WIPE_EXTERNAL_STORAGE, false);\r
- }\r
- this.context.sendBroadcast(intent);\r
- }\r
-\r
}\r
\r
\r
\r
import android.app.ActivityManager;\r
import android.content.Context;\r
+import android.content.Intent;\r
import android.content.pm.PackageInfo;\r
import android.content.pm.PackageManager;\r
import android.database.Cursor;\r
import android.net.Uri;\r
import android.os.Build;\r
+import android.os.Environment;\r
+import android.os.PowerManager;\r
import android.provider.Settings;\r
import android.telephony.TelephonyManager;\r
\r
import com.ic.jni.ICJniUtils;\r
\r
import java.io.FileInputStream;\r
+import java.lang.reflect.Method;\r
import java.util.ArrayList;\r
\r
import chestnut.utils.PhoneUtils;\r
}\r
return versions.toString();\r
}\r
+\r
+\r
}\r
--- /dev/null
+package com.enqualcomm.support.utils;\r
+\r
+import com.enqualcomm.support.bean.voicePacket;\r
+\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+\r
+public class LedUtil {\r
+ private final static String RED_LED_PATH="/sys/class/leds/redled/brightness";\r
+ private final static String BLUE_LED_PATH="/sys/class/leds/blueled/brightness";\r
+\r
+ private static File BlueLedFile=new File(BLUE_LED_PATH);\r
+ private static FileInputStream fisLedBlue =null;\r
+ private static FileOutputStream fosLedBlue=null;\r
+\r
+ private static File RedLedFile=new File(RED_LED_PATH);\r
+ private static FileInputStream fisLedRed =null;\r
+ private static FileOutputStream fosLedRed=null;\r
+\r
+\r
+ /*\r
+ 1:长按按键开机。开机震动+铃声。\r
+2:联系按按键6次,关机。播放关机铃声\r
+3:开机后,长按3秒是SOS报警,循环拨打事先设置好的3个SOS号码。\r
+4:电量低时红灯闪烁 (2~3秒一次),充电时,红灯常亮。充满以后蓝灯常亮。\r
+5:SIM卡异常,没有连上后台等异常时,蓝灯闪烁。\r
+6:来电时,按键一次接听,连续2次按按键是拒接。\r
+7:待机时,按一次按键,语音播报当前时间。并且蓝灯闪烁一次。\r
+ */\r
+ enum LedChargeStatus{\r
+ LED_CHARGE_ON_NOT_FULL,\r
+ LED_CHARGE_ON_FULL,\r
+ LED_CHARGE_OFF,\r
+ }\r
+\r
+ enum LedSimServerStatus{\r
+ LED_SERVER_CONNECTED,\r
+ LED_SERVER_DISCONNECTED,\r
+ }\r
+\r
+ enum LedPlayTimeStatus{\r
+\r
+ }\r
+ public static int ChargeLEDStatus=0;\r
+\r
+\r
+\r
+ public static boolean isRedLedExist(){\r
+\r
+ return RedLedFile.exists();\r
+ }\r
+ public static boolean isBlueLedExist(){\r
+ return BlueLedFile.exists();\r
+ }\r
+ public static boolean isRedLedOn(){\r
+\r
+ int ledon;\r
+ if (isRedLedExist()) {\r
+ try {\r
+ fisLedRed=new FileInputStream(RedLedFile);\r
+ ledon= fisLedBlue.read();\r
+ fisLedRed.close();\r
+ if (ledon == '0'){\r
+ return false;\r
+ }else{\r
+ return true;\r
+ }\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ return false;\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ return false;\r
+ }\r
+\r
+ }else{\r
+\r
+ return false;\r
+ }\r
+ }\r
+ public static boolean isBlueLedOn(){\r
+\r
+ int ledon;\r
+ if (isBlueLedExist()) {\r
+ try {\r
+ fisLedBlue=new FileInputStream(BlueLedFile);\r
+ ledon= fisLedBlue.read();\r
+ fisLedBlue.close();\r
+ if (ledon == '0'){\r
+ return false;\r
+ }else{\r
+ return true;\r
+ }\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ return false;\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ return false;\r
+ }\r
+\r
+ }else{\r
+\r
+ return false;\r
+ }\r
+ }\r
+ public static void setRedLedOn(boolean ledon){\r
+ if (isRedLedExist()) {\r
+ try {\r
+ fosLedRed=new FileOutputStream(RedLedFile);\r
+ if (ledon)\r
+ fosLedRed.write('1');\r
+ else\r
+ fosLedRed.write('0');\r
+ fosLedRed.close();\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void setBlueLedOn(boolean ledon){\r
+ if (isRedLedExist()) {\r
+ try {\r
+ fosLedBlue=new FileOutputStream(BlueLedFile);\r
+ if (ledon)\r
+ fosLedBlue.write('1');\r
+ else\r
+ fosLedBlue.write('0');\r
+ fosLedBlue.close();\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+}\r
import static android.os.PowerManager.SCREEN_DIM_WAKE_LOCK;\r
import static com.enqualcomm.support.Constants.ACTION_CLOSE_UNREAD_MSG;\r
import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;\r
+import static com.enqualcomm.support.Constants.ACTION_PLAYTIME;\r
import static com.enqualcomm.support.Constants.ACTION_REMOTE_CAMERA;\r
import static com.enqualcomm.support.Constants.ACTION_SEND_EMEGENCY_LOCATION_START;\r
import static com.enqualcomm.support.Constants.ACTION_SEND_SOS_MSG;\r
+import static com.enqualcomm.support.Constants.ACTION_SHUTDOWN;\r
import static com.enqualcomm.support.Constants.DIALOG_ACTION;\r
import static com.enqualcomm.support.Constants.RESUME_ACTION;\r
import static com.enqualcomm.support.Constants.SOS_ACTION;\r
this.mAudioService = new AudioService(); \r
this.mAudioService.play(paramContext.getAssets(), "ring_msg.mp3");\r
}\r
- \r
+\r
+ private void playshutdownsound(Context paramContext) {\r
+ if (this.mAudioService == null)\r
+ this.mAudioService = new AudioService();\r
+ this.mAudioService.play(paramContext.getAssets(), "shutdownsound.mp3");\r
+ }\r
+\r
private void screenOn(Context paramContext) {\r
final PowerManager.WakeLock wakelock = ((PowerManager)paramContext.getSystemService(Context.POWER_SERVICE)).newWakeLock(ACQUIRE_CAUSES_WAKEUP| SCREEN_DIM_WAKE_LOCK, ProcessReceiver.class.getSimpleName());\r
wakelock.acquire();\r
if (RESUME_ACTION.equals(str)) {\r
SharPreferenceUtil.setPrefBoolean(paramContext, "key_is_resume", paramIntent.getBooleanExtra("is_resume", false));\r
return;\r
- }else if (ACTION_REMOTE_CAMERA.equals(str)) {\r
- String str1;\r
- str1 = paramIntent.getStringExtra("key_remote_number");\r
- (new CameraUtil(paramContext)).getPictur(str1);\r
+ }else if (ACTION_SHUTDOWN.equals(str)) {\r
+\r
+ playshutdownsound(paramContext);\r
+\r
+ Util.shutdown();\r
+ return;\r
+ }else if (ACTION_PLAYTIME.equals(str)) {\r
+ LedUtil.setBlueLedOn(true);\r
+ new Handler().postDelayed(new Runnable() {\r
+ @Override\r
+ public void run() {\r
+ LedUtil.setBlueLedOn(false);\r
+ }\r
+ },2000L);\r
return;\r
+ }else if (ACTION_REMOTE_CAMERA.equals(str)) {\r
+ String str1;\r
+ str1 = paramIntent.getStringExtra("key_remote_number");\r
+ (new CameraUtil(paramContext)).getPictur(str1);\r
+ return;\r
\r
}else if (DIALOG_ACTION.equals(str)) {\r
if (paramIntent.hasExtra("contact")) {\r
\r
import android.annotation.TargetApi;\r
import android.content.Context;\r
+import android.content.Intent;\r
import android.graphics.Bitmap;\r
import android.graphics.BitmapFactory;\r
import android.media.MediaPlayer;\r
import android.net.wifi.WifiConfiguration;\r
import android.net.wifi.WifiManager;\r
import android.os.Build;\r
+import android.os.Environment;\r
import android.os.Handler;\r
import android.os.Looper;\r
+import android.os.PowerManager;\r
import android.widget.Toast;\r
\r
\r
}\r
return false;\r
}\r
+\r
+\r
+ public static void reboot(Context context) {\r
+ PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);\r
+ try {\r
+ powerManager.reboot("remote reboot");\r
+ ICLogger.i("命令重启");\r
+ return;\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ return;\r
+ }\r
+ }\r
+\r
+\r
+ public static void shutdown() {\r
+ try {\r
+\r
+ //获得ServiceManager类\r
+ Class ServiceManager = Class\r
+ .forName("android.os.ServiceManager");\r
+\r
+ //获得ServiceManager的getService方法\r
+ Method getService = ServiceManager.getMethod("getService", java.lang.String.class);\r
+\r
+ //调用getService获取RemoteService\r
+ Object oRemoteService = getService.invoke(null, Context.POWER_SERVICE);\r
+\r
+ //获得IPowerManager.Stub类\r
+ Class cStub = Class\r
+ .forName("android.os.IPowerManager$Stub");\r
+ //获得asInterface方法\r
+ Method asInterface = cStub.getMethod("asInterface", android.os.IBinder.class);\r
+ //调用asInterface方法获取IPowerManager对象\r
+ Object oIPowerManager = asInterface.invoke(null, oRemoteService);\r
+ //获得shutdown()方法\r
+ Method shutdown = oIPowerManager.getClass().getMethod("shutdown",boolean.class,boolean.class);\r
+ //调用shutdown()方法\r
+ shutdown.invoke(oIPowerManager,false,true);\r
+\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";\r
+ public static final String EXTRA_REASON = "android.intent.extra.REASON";\r
+ public static final String EXTRA_WIPE_EXTERNAL_STORAGE = "android.intent.extra.WIPE_EXTERNAL_STORAGE";\r
+\r
+ public static void doMasterClear(Context context) {\r
+ Intent intent = new Intent(ACTION_MASTER_CLEAR);\r
+ intent.setPackage("android");\r
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);\r
+ intent.putExtra(EXTRA_REASON, "MasterClearConfirm");\r
+ if (Environment.isExternalStorageRemovable()) {\r
+ intent.putExtra(EXTRA_WIPE_EXTERNAL_STORAGE, true);\r
+ }else\r
+ {\r
+ intent.putExtra(EXTRA_WIPE_EXTERNAL_STORAGE, false);\r
+ }\r
+ context.sendBroadcast(intent);\r
+ }\r
}\r
\r
-#Mon Apr 13 16:03:41 CST 2020\r
-VERSION_CODE=402\r
+#Sun Apr 19 05:20:52 CST 2020\r
+VERSION_CODE=406\r
# Location of the SDK. This is only used by Gradle.\r
# For customization when using a Version Control System, please read the\r
# header note.\r
-#Mon Mar 16 11:44:29 CST 2020\r
-sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk\r
+#Sun Apr 12 23:38:56 CST 2020\r
+sdk.dir=E\:\\Android\\sdk\r