EApplication.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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 com.umeng.commonsdk.UMConfigure;
  18. import java.lang.reflect.Field;
  19. import java.lang.reflect.Method;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import java.util.Map;
  23. import okhttp3.Request;
  24. public class EApplication extends Application {
  25. final String XIAOMI_ID = "";
  26. final String XIAOMI_KEY = "";
  27. static String mUMengAppID;
  28. private int activityAount = 0;
  29. public boolean isForeground = false;
  30. public static long APP_START_TIME = 0;
  31. @Override
  32. public void onCreate() {
  33. super.onCreate();
  34. ContextUtil.setContext(this);
  35. ContextUtil.setApplication(this);
  36. //上线关掉debug模式
  37. ContextUtil.setIsDebug(true);
  38. mUMengAppID = getChannelName();
  39. // mUMengAppID = "3001";
  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. if (getAppCode().equals(getString(R.string.app_code_xm))) {
  58. // MiPushRegistar.register(this, XIAOMI_ID, XIAOMI_KEY);
  59. } else if (getAppCode().equals(getString(R.string.app_code_huawei))) {
  60. // HuaWeiRegister.register(this);
  61. } else if (getAppCode().equals(getString(R.string.app_code_vivo))) {
  62. // VivoRegister.register(this);
  63. }
  64. PayInit.getInstance().initPaySDK(Integer.valueOf(getAppCode()), EApplication.this);
  65. if (!getPackageName().equals(
  66. getProcessName(getApplicationContext(), android.os.Process.myPid()))) {
  67. return;
  68. }
  69. //如果是新应用,默认设置播放器为ijkplayer
  70. if (SPutil.getPrefInt(this, SPutil.videoType, 0) == 0) {
  71. SPutil.setPrefInt(this, SPutil.videoType, SPutil.VIDEO_IJKPLAYER);
  72. }
  73. /*
  74. * AppKey
  75. 5e34d2fb4ca3574b1800005b
  76. Umeng Message Secret
  77. dfc59afd6dc6b1550ff1c2e0c7eb10fd
  78. App Master Secret
  79. ojy29ycnnynpvyetpunc2m0ija4vskyo
  80. *
  81. * */
  82. }
  83. public static void exitApp() {
  84. Intent intent_close = new Intent(ContextUtil.CLOSE_ACTIVITY_SPLASH);
  85. ContextUtil.getContext().sendBroadcast(intent_close);
  86. }
  87. private static List<Activity> getAllActivitys() {
  88. List<Activity> list = new ArrayList<>();
  89. try {
  90. Class<?> activityThread = Class.forName("android.app.ActivityThread");
  91. Method currentActivityThread = activityThread.getDeclaredMethod("currentActivityThread");
  92. currentActivityThread.setAccessible(true);
  93. //获取主线程对象
  94. Object activityThreadObject = currentActivityThread.invoke(null);
  95. Field mActivitiesField = activityThread.getDeclaredField("mActivities");
  96. mActivitiesField.setAccessible(true);
  97. Map<Object, Object> mActivities = (Map<Object, Object>) mActivitiesField.get(activityThreadObject);
  98. for (Map.Entry<Object, Object> entry : mActivities.entrySet()) {
  99. Object value = entry.getValue();
  100. Class<?> activityClientRecordClass = value.getClass();
  101. Field activityField = activityClientRecordClass.getDeclaredField("activity");
  102. activityField.setAccessible(true);
  103. Object o = activityField.get(value);
  104. list.add((Activity) o);
  105. }
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. }
  109. return list;
  110. }
  111. public static void clearActivity() {
  112. List<Activity> myAclist = getAllActivitys();
  113. for (int i = 0; i < myAclist.size(); i++) {
  114. myAclist.get(i).finish();
  115. }
  116. }
  117. @Nullable
  118. public String getProcessName(Context cxt, int pid) {
  119. ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
  120. if (am == null) {
  121. return null;
  122. }
  123. List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
  124. if (runningApps != null && !runningApps.isEmpty()) {
  125. for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
  126. if (procInfo.pid == pid) {
  127. return procInfo.processName;
  128. }
  129. }
  130. }
  131. return null;
  132. }
  133. public static String getAppCode() {
  134. //记得改友盟code
  135. return mUMengAppID;
  136. }
  137. public String getChannelName() {
  138. String channelName = null;
  139. try {
  140. PackageManager packageManager = getPackageManager();
  141. if (packageManager != null) {
  142. //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
  143. ApplicationInfo applicationInfo = packageManager.
  144. getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
  145. if (applicationInfo != null) {
  146. if (applicationInfo.metaData != null) {
  147. channelName = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));
  148. }
  149. }
  150. }
  151. } catch (Exception e) {
  152. e.printStackTrace();
  153. }
  154. return channelName;
  155. }
  156. ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
  157. @Override
  158. public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
  159. }
  160. @Override
  161. public void onActivityStarted(Activity activity) {
  162. if (activityAount == 0) {
  163. //app回到前台
  164. isForeground = true;
  165. // ToastUtil.showToast("app回到前台了");
  166. Logger.e("app回到前台了");
  167. APP_START_TIME = System.currentTimeMillis();
  168. }
  169. activityAount++;
  170. }
  171. @Override
  172. public void onActivityResumed(Activity activity) {
  173. }
  174. @Override
  175. public void onActivityPaused(Activity activity) {
  176. }
  177. @Override
  178. public void onActivityStopped(Activity activity) {
  179. activityAount--;
  180. if (activityAount == 0) {
  181. isForeground = false;
  182. // ToastUtil.showToast("app后台了");
  183. Logger.e("app后台了");
  184. OKHttpUtil.getInstance().postUserTime(new OKHttpUtil.ResultCallback() {
  185. @Override
  186. public void onError(Request request, Exception e) {
  187. // exitApp();
  188. // android.os.Process.killProcess(android.os.Process.myPid());
  189. APP_START_TIME = 0;
  190. }
  191. @Override
  192. public void onResponse(Object response) {
  193. Logger.e("response:" + response);
  194. // exitApp();
  195. // android.os.Process.killProcess(android.os.Process.myPid());
  196. APP_START_TIME = 0;
  197. }
  198. });
  199. }
  200. }
  201. @Override
  202. public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
  203. }
  204. @Override
  205. public void onActivityDestroyed(Activity activity) {
  206. }
  207. };
  208. }