diff --git a/mpres/src/main/java/com/xypower/mpres/MainActivity.java b/mpres/src/main/java/com/xypower/mpres/MainActivity.java index c49a5133..b9c4a84d 100644 --- a/mpres/src/main/java/com/xypower/mpres/MainActivity.java +++ b/mpres/src/main/java/com/xypower/mpres/MainActivity.java @@ -1,5 +1,6 @@ package com.xypower.mpres; +import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; @@ -24,6 +25,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; +import java.util.List; +import java.util.concurrent.ExecutionException; public class MainActivity extends AppCompatActivity { @@ -38,23 +41,29 @@ public class MainActivity extends AppCompatActivity { if (initres != 0) { mHandler = new Handler(); final String sn = intent.getStringExtra("sn"); + final Context context = getApplicationContext(); Runnable runnable = new Runnable() { @Override public void run() { - notifyMpApp(); + + try { + if (initMpMasterConfigurations(context)) { + restartMpMasterApp(context); + } + + restartMpApp(getApplicationContext(), "FIRST Config Init"); + sleep(100); + System.exit(0); + } catch (Exception ex) { + ex.printStackTrace(); + } } }; - initMpAppConfigurations(getApplicationContext(), mHandler, sn, runnable); + initMpAppConfigurations(context, mHandler, sn, runnable); } } - private void notifyMpApp() { - restartMpApp(getApplicationContext(), "FIRST Config Init"); - sleep(100); - System.exit(0); - } - public static boolean initMpAppConfigurations(final Context context, final Handler handler, final String sn, final Runnable runnable) { boolean existed = true; @@ -169,7 +178,7 @@ public class MainActivity extends AppCompatActivity { } } - copyAssetsDir(context, "mpmst", dataPath.getAbsolutePath()); + copyAssetsDir(context, "mpmst/data", dataPath.getAbsolutePath()); return true; } @@ -262,7 +271,8 @@ public class MainActivity extends AppCompatActivity { public static void restartMpApp(Context context, String reason) { - SysApi.forceStopApp(context, MicroPhotoContext.PACKAGE_NAME_MPAPP); + // SysApi.forceStopApp(context, MicroPhotoContext.PACKAGE_NAME_MPAPP); + killAppProcess(context, MicroPhotoContext.PACKAGE_NAME_MPAPP); sleep(100); try { @@ -279,4 +289,65 @@ public class MainActivity extends AppCompatActivity { e.printStackTrace(); } } + + public static void restartMpMasterApp(Context context) { + + killAppProcess(context, MicroPhotoContext.PACKAGE_NAME_MPMASTER); + sleep(50); + + try { + Intent intent = context.getPackageManager().getLaunchIntentForPackage(MicroPhotoContext.PACKAGE_NAME_MPMASTER); + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static boolean killAppProcess(final Context context, String packageName) { + boolean killed = false; + try { + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List processes = am.getRunningAppProcesses(); + + for (ActivityManager.RunningAppProcessInfo rapi : processes) { + if (rapi.pkgList == null || rapi.pkgList.length == 0) { + continue; + } + + for (String pkg : rapi.pkgList) { + if (TextUtils.equals(pkg, packageName)) { + killed = true; + android.os.Process.killProcess(rapi.pid); + break; + } + } + + if (killed) { + break; + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + + return killed; + } + + private boolean killAppByService(final Context context, String packageName, String serviceClassName) { + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List services = am.getRunningServices(Integer.MAX_VALUE); + + boolean isRunning = false; + for (ActivityManager.RunningServiceInfo rsi : services) { + if (packageName.equalsIgnoreCase(rsi.service.getPackageName()) && TextUtils.equals(serviceClassName, rsi.service.getClassName())) { + isRunning = true; + break; + } + } + + return isRunning; + } } \ No newline at end of file