release V406
authorsnicker <snickersun@163.com>
Sun, 19 Apr 2020 14:15:52 +0000 (22:15 +0800)
committersnicker <snickersun@163.com>
Sun, 19 Apr 2020 14:15:52 +0000 (22:15 +0800)
为L03 Tracker 添加LED控制,目前还不完善,不支持连续闪烁,临时版本。

16 files changed:
app/release/ICSer_V388_2003311130_release.apk [deleted file]
app/release/ICSer_V406_2004190520_release.apk [new file with mode: 0644]
app/src/main/AndroidManifest.xml
app/src/main/assets/shutdownsound.mp3 [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/Config.java
app/src/main/java/com/enqualcomm/support/Constants.java
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/BatteryUtil.java
app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java
app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java
app/src/main/java/com/enqualcomm/support/utils/LedUtil.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java
app/src/main/java/com/enqualcomm/support/utils/Util.java
app/version_code.properties
local.properties

diff --git a/app/release/ICSer_V388_2003311130_release.apk b/app/release/ICSer_V388_2003311130_release.apk
deleted file mode 100644 (file)
index 78e3f0a..0000000
Binary files a/app/release/ICSer_V388_2003311130_release.apk and /dev/null differ
diff --git a/app/release/ICSer_V406_2004190520_release.apk b/app/release/ICSer_V406_2004190520_release.apk
new file mode 100644 (file)
index 0000000..663f531
Binary files /dev/null and b/app/release/ICSer_V406_2004190520_release.apk differ
index c77b132..c9f8705 100644 (file)
                 <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" /> -->
diff --git a/app/src/main/assets/shutdownsound.mp3 b/app/src/main/assets/shutdownsound.mp3
new file mode 100644 (file)
index 0000000..a12dd11
Binary files /dev/null and b/app/src/main/assets/shutdownsound.mp3 differ
index d7acd18..66370ac 100644 (file)
@@ -11,6 +11,8 @@ import com.enqualcomm.support.utils.SharPreferenceUtil;
 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
@@ -47,74 +49,6 @@ public class Config {
               .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
@@ -129,6 +63,7 @@ public class Config {
     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
@@ -158,6 +93,11 @@ public class Config {
   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
index e7c131f..51d412d 100644 (file)
@@ -4,6 +4,12 @@ import android.net.Uri;
 \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
index e310472..0bb854d 100644 (file)
@@ -22,6 +22,7 @@ import android.widget.Toast;
 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
@@ -592,7 +593,15 @@ public class CoreService extends Service {
         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
index be2583b..ae325e6 100644 (file)
@@ -358,14 +358,14 @@ public static void sendLocationMSG( String Msg){
       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
@@ -373,7 +373,7 @@ public static void sendLocationMSG( String Msg){
 \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
index 4e0ad43..5df9c17 100644 (file)
@@ -44,6 +44,10 @@ public class BatteryUtil {
               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
@@ -101,12 +105,18 @@ public class BatteryUtil {
           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
index 4840c92..92f9af9 100644 (file)
@@ -324,67 +324,6 @@ public class ContextProxy {
     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
index cab7a3b..8214e1b 100644 (file)
@@ -2,11 +2,14 @@ package com.enqualcomm.support.utils;
 \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
@@ -18,6 +21,7 @@ import com.enqualcomm.support.service.KeepAlive;
 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
@@ -318,4 +322,6 @@ public class DeviceInfoUtil {
       }\r
       return versions.toString();\r
     }\r
+\r
+\r
 }\r
diff --git a/app/src/main/java/com/enqualcomm/support/utils/LedUtil.java b/app/src/main/java/com/enqualcomm/support/utils/LedUtil.java
new file mode 100644 (file)
index 0000000..0a3b384
--- /dev/null
@@ -0,0 +1,143 @@
+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
index a1873f9..2e0c9f7 100644 (file)
@@ -41,9 +41,11 @@ import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;
 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
@@ -180,7 +182,13 @@ public class ProcessReceiver extends BroadcastReceiver {
       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
@@ -202,11 +210,26 @@ public class ProcessReceiver extends BroadcastReceiver {
     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
index ab7f535..8cfd2d3 100644 (file)
@@ -2,6 +2,7 @@ package com.enqualcomm.support.utils;
 \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
@@ -10,8 +11,10 @@ import android.net.NetworkInfo;
 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
@@ -809,5 +812,67 @@ public class Util {
     }\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
index 2b8a5a3..9fceacd 100644 (file)
@@ -1,2 +1,2 @@
-#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
index 1e8cdd3..218d050 100644 (file)
@@ -4,5 +4,5 @@
 # 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