package com.edufound.android.xyyf.application; import android.app.Activity; import android.app.ActivityManager; import android.app.Application; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.annotation.Nullable; import com.edufound.android.xyyf.R; import com.edufound.android.xyyf.pay.PayInit; import com.edufound.android.xyyf.util.ContextUtil; import com.edufound.android.xyyf.util.Logger; import com.edufound.android.xyyf.util.OKHttpUtil; import com.edufound.android.xyyf.util.SPutil; import org.android.agoo.vivo.VivoRegister; import org.android.agoo.xiaomi.MiPushRegistar; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Map; import okhttp3.Request; public class EApplication extends Application { final String XIAOMI_ID = ""; final String XIAOMI_KEY = ""; static String mUMengAppID; private int activityAount = 0; public boolean isForeground = false; public static long APP_START_TIME = 0; @Override public void onCreate() { super.onCreate(); ContextUtil.setContext(this); ContextUtil.setApplication(this); //上线关掉debug模式 ContextUtil.setIsDebug(true); mUMengAppID = getChannelName(); APP_START_TIME = System.currentTimeMillis(); //根据appcode初始化支付sdk // UMConfigure.setLogEnabled(true); // UMConfigure.init(this, "5ffbb9e0f1eb4f3f9b58b05e", getAppCode() + "", UMConfigure.DEVICE_TYPE_PHONE, "dfc59afd6dc6b1550ff1c2e0c7eb10fd"); // PushAgent mPushAgent = PushAgent.getInstance(this); // mPushAgent.register(new IUmengRegisterCallback() { // @Override // public void onSuccess(String deviceToken) { // Logger.e("DeviceToken:" + deviceToken); // } // // @Override // public void onFailure(String s, String s1) { // Logger.e("注册失败:--------> " + "s:" + s + ",s1:" + s1); // } // }); registerActivityLifecycleCallbacks(activityLifecycleCallbacks); PayInit.getInstance().initPaySDK(Integer.valueOf(getAppCode()), EApplication.this); if (!getPackageName().equals( getProcessName(getApplicationContext(), android.os.Process.myPid()))) { return; } //如果是新应用,默认设置播放器为ijkplayer if (SPutil.getPrefInt(this, SPutil.videoType, 0) == 0) { SPutil.setPrefInt(this, SPutil.videoType, SPutil.VIDEO_IJKPLAYER); } } public static void exitApp() { Intent intent_close = new Intent(ContextUtil.CLOSE_ACTIVITY_SPLASH); ContextUtil.getContext().sendBroadcast(intent_close); } private static List getAllActivitys() { List list = new ArrayList<>(); try { Class activityThread = Class.forName("android.app.ActivityThread"); Method currentActivityThread = activityThread.getDeclaredMethod("currentActivityThread"); currentActivityThread.setAccessible(true); //获取主线程对象 Object activityThreadObject = currentActivityThread.invoke(null); Field mActivitiesField = activityThread.getDeclaredField("mActivities"); mActivitiesField.setAccessible(true); Map mActivities = (Map) mActivitiesField.get(activityThreadObject); for (Map.Entry entry : mActivities.entrySet()) { Object value = entry.getValue(); Class activityClientRecordClass = value.getClass(); Field activityField = activityClientRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); Object o = activityField.get(value); list.add((Activity) o); } } catch (Exception e) { e.printStackTrace(); } return list; } public static void clearActivity() { List myAclist = getAllActivitys(); for (int i = 0; i < myAclist.size(); i++) { myAclist.get(i).finish(); } } @Nullable public String getProcessName(Context cxt, int pid) { ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE); if (am == null) { return null; } List runningApps = am.getRunningAppProcesses(); if (runningApps != null && !runningApps.isEmpty()) { for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) { if (procInfo.pid == pid) { return procInfo.processName; } } } return null; } public static String getAppCode() { //记得改友盟code return mUMengAppID; } public String getChannelName() { String channelName = null; try { PackageManager packageManager = getPackageManager(); if (packageManager != null) { //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo ApplicationInfo applicationInfo = packageManager. getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo != null) { if (applicationInfo.metaData != null) { channelName = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL")); } } } } catch (Exception e) { e.printStackTrace(); } return channelName; } ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { if (activityAount == 0) { //app回到前台 isForeground = true; // ToastUtil.showToast("app回到前台了"); Logger.e("app回到前台了"); APP_START_TIME = System.currentTimeMillis(); } activityAount++; } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { activityAount--; if (activityAount == 0) { isForeground = false; // ToastUtil.showToast("app后台了"); Logger.e("app后台了"); OKHttpUtil.getInstance().postUserTime(new OKHttpUtil.ResultCallback() { @Override public void onError(Request request, Exception e) { // exitApp(); // android.os.Process.killProcess(android.os.Process.myPid()); APP_START_TIME = 0; } @Override public void onResponse(Object response) { Logger.e("response:" + response); // exitApp(); // android.os.Process.killProcess(android.os.Process.myPid()); APP_START_TIME = 0; } }); } } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } }; }