EApplication.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.edufound.android.xyyf.application;
  2. import android.app.Activity;
  3. import android.app.ActivityManager;
  4. import android.app.Application;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.pm.ApplicationInfo;
  8. import android.content.pm.PackageManager;
  9. import android.os.Bundle;
  10. import android.support.annotation.Nullable;
  11. import com.edufound.android.xyyf.R;
  12. import com.edufound.android.xyyf.pay.PayInit;
  13. import com.edufound.android.xyyf.util.ContextUtil;
  14. import com.edufound.android.xyyf.util.Logger;
  15. import com.edufound.android.xyyf.util.OKHttpUtil;
  16. import com.edufound.android.xyyf.util.SPutil;
  17. import org.android.agoo.vivo.VivoRegister;
  18. import org.android.agoo.xiaomi.MiPushRegistar;
  19. import java.lang.reflect.Field;
  20. import java.lang.reflect.Method;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.Map;
  24. import okhttp3.Request;
  25. public class EApplication extends Application {
  26. final String XIAOMI_ID = "";
  27. final String XIAOMI_KEY = "";
  28. static String mUMengAppID;
  29. private int activityAount = 0;
  30. public boolean isForeground = false;
  31. public static long APP_START_TIME = 0;
  32. @Override
  33. public void onCreate() {
  34. super.onCreate();
  35. ContextUtil.setContext(this);
  36. ContextUtil.setApplication(this);
  37. //上线关掉debug模式
  38. ContextUtil.setIsDebug(true);
  39. mUMengAppID = getChannelName();
  40. APP_START_TIME = System.currentTimeMillis();
  41. //根据appcode初始化支付sdk
  42. // UMConfigure.setLogEnabled(true);
  43. // UMConfigure.init(this, "5ffbb9e0f1eb4f3f9b58b05e", getAppCode() + "", UMConfigure.DEVICE_TYPE_PHONE, "dfc59afd6dc6b1550ff1c2e0c7eb10fd");
  44. // PushAgent mPushAgent = PushAgent.getInstance(this);
  45. // mPushAgent.register(new IUmengRegisterCallback() {
  46. // @Override
  47. // public void onSuccess(String deviceToken) {
  48. // Logger.e("DeviceToken:" + deviceToken);
  49. // }
  50. //
  51. // @Override
  52. // public void onFailure(String s, String s1) {
  53. // Logger.e("注册失败:--------> " + "s:" + s + ",s1:" + s1);
  54. // }
  55. // });
  56. registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
  57. PayInit.getInstance().initPaySDK(Integer.valueOf(getAppCode()), EApplication.this);
  58. if (!getPackageName().equals(
  59. getProcessName(getApplicationContext(), android.os.Process.myPid()))) {
  60. return;
  61. }
  62. //如果是新应用,默认设置播放器为ijkplayer
  63. if (SPutil.getPrefInt(this, SPutil.videoType, 0) == 0) {
  64. SPutil.setPrefInt(this, SPutil.videoType, SPutil.VIDEO_IJKPLAYER);
  65. }
  66. }
  67. public static void exitApp() {
  68. Intent intent_close = new Intent(ContextUtil.CLOSE_ACTIVITY_SPLASH);
  69. ContextUtil.getContext().sendBroadcast(intent_close);
  70. }
  71. private static List<Activity> getAllActivitys() {
  72. List<Activity> list = new ArrayList<>();
  73. try {
  74. Class<?> activityThread = Class.forName("android.app.ActivityThread");
  75. Method currentActivityThread = activityThread.getDeclaredMethod("currentActivityThread");
  76. currentActivityThread.setAccessible(true);
  77. //获取主线程对象
  78. Object activityThreadObject = currentActivityThread.invoke(null);
  79. Field mActivitiesField = activityThread.getDeclaredField("mActivities");
  80. mActivitiesField.setAccessible(true);
  81. Map<Object, Object> mActivities = (Map<Object, Object>) mActivitiesField.get(activityThreadObject);
  82. for (Map.Entry<Object, Object> entry : mActivities.entrySet()) {
  83. Object value = entry.getValue();
  84. Class<?> activityClientRecordClass = value.getClass();
  85. Field activityField = activityClientRecordClass.getDeclaredField("activity");
  86. activityField.setAccessible(true);
  87. Object o = activityField.get(value);
  88. list.add((Activity) o);
  89. }
  90. } catch (Exception e) {
  91. e.printStackTrace();
  92. }
  93. return list;
  94. }
  95. public static void clearActivity() {
  96. List<Activity> myAclist = getAllActivitys();
  97. for (int i = 0; i < myAclist.size(); i++) {
  98. myAclist.get(i).finish();
  99. }
  100. }
  101. @Nullable
  102. public String getProcessName(Context cxt, int pid) {
  103. ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
  104. if (am == null) {
  105. return null;
  106. }
  107. List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
  108. if (runningApps != null && !runningApps.isEmpty()) {
  109. for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
  110. if (procInfo.pid == pid) {
  111. return procInfo.processName;
  112. }
  113. }
  114. }
  115. return null;
  116. }
  117. public static String getAppCode() {
  118. //记得改友盟code
  119. return mUMengAppID;
  120. }
  121. public String getChannelName() {
  122. String channelName = null;
  123. try {
  124. PackageManager packageManager = getPackageManager();
  125. if (packageManager != null) {
  126. //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
  127. ApplicationInfo applicationInfo = packageManager.
  128. getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
  129. if (applicationInfo != null) {
  130. if (applicationInfo.metaData != null) {
  131. channelName = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));
  132. }
  133. }
  134. }
  135. } catch (Exception e) {
  136. e.printStackTrace();
  137. }
  138. return channelName;
  139. }
  140. ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
  141. @Override
  142. public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
  143. }
  144. @Override
  145. public void onActivityStarted(Activity activity) {
  146. if (activityAount == 0) {
  147. //app回到前台
  148. isForeground = true;
  149. // ToastUtil.showToast("app回到前台了");
  150. Logger.e("app回到前台了");
  151. APP_START_TIME = System.currentTimeMillis();
  152. }
  153. activityAount++;
  154. }
  155. @Override
  156. public void onActivityResumed(Activity activity) {
  157. }
  158. @Override
  159. public void onActivityPaused(Activity activity) {
  160. }
  161. @Override
  162. public void onActivityStopped(Activity activity) {
  163. activityAount--;
  164. if (activityAount == 0) {
  165. isForeground = false;
  166. // ToastUtil.showToast("app后台了");
  167. Logger.e("app后台了");
  168. OKHttpUtil.getInstance().postUserTime(new OKHttpUtil.ResultCallback() {
  169. @Override
  170. public void onError(Request request, Exception e) {
  171. // exitApp();
  172. // android.os.Process.killProcess(android.os.Process.myPid());
  173. APP_START_TIME = 0;
  174. }
  175. @Override
  176. public void onResponse(Object response) {
  177. Logger.e("response:" + response);
  178. // exitApp();
  179. // android.os.Process.killProcess(android.os.Process.myPid());
  180. APP_START_TIME = 0;
  181. }
  182. });
  183. }
  184. }
  185. @Override
  186. public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
  187. }
  188. @Override
  189. public void onActivityDestroyed(Activity activity) {
  190. }
  191. };
  192. }