package com.weikou.beibeivideo;
|
|
import android.app.Activity;
|
import android.app.ActivityManager;
|
import android.app.Application;
|
import android.content.BroadcastReceiver;
|
import android.content.ComponentName;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.IntentFilter;
|
import android.content.SharedPreferences;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.telephony.TelephonyManager;
|
import android.util.Log;
|
import android.widget.Toast;
|
|
import com.alibaba.baichuan.android.trade.AlibcTradeSDK;
|
import com.alibaba.baichuan.android.trade.callback.AlibcTradeInitCallback;
|
import com.baidu.mobads.AppActivity;
|
import com.funshion.playsdk.register.IAuthCodeGetter;
|
import com.lcjian.library.util.ManifestDataUtil;
|
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
|
import com.qq.e.comm.managers.GDTADManager;
|
import com.qq.e.comm.managers.GDTAdSdk;
|
import com.qq.e.comm.util.GDTLogger;
|
import com.tencent.mm.opensdk.constants.ConstantsAPI;
|
import com.tencent.mm.opensdk.openapi.IWXAPI;
|
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
|
import com.tencent.smtt.sdk.QbSdk;
|
import com.umeng.analytics.MobclickAgent;
|
import com.umeng.commonsdk.UMConfigure;
|
import com.umeng.socialize.PlatformConfig;
|
import com.umeng.socialize.UMShareAPI;
|
import com.weikou.beibeivideo.entity.ad.AdPidInfo;
|
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
|
import com.weikou.beibeivideo.entity.ad.SplashAdLoadInfo;
|
import com.weikou.beibeivideo.ui.SplashActivity;
|
import com.weikou.beibeivideo.ui.ad.SplashADFragment;
|
import com.weikou.beibeivideo.ui.ad.SplashAdActivity;
|
import com.weikou.beibeivideo.ui.push.PushOpenClickActivity;
|
import com.weikou.beibeivideo.util.BeibeiConstant;
|
import com.weikou.beibeivideo.util.CrashHandler;
|
import com.weikou.beibeivideo.util.UserUtil;
|
import com.weikou.beibeivideo.util.ad.AdUtil;
|
import com.weikou.beibeivideo.util.ad.CSJConstant;
|
import com.weikou.beibeivideo.util.ad.GDTConstant;
|
import com.weikou.beibeivideo.util.ad.TTAdManagerHolder;
|
import com.weikou.beibeivideo.util.downutil.StringUtils;
|
|
import org.apache.http.Header;
|
import org.greenrobot.eventbus.EventBus;
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
import androidx.multidex.MultiDex;
|
|
|
public class BeibeiVideoApplication extends Application {
|
|
private final static String TAG = BeibeiVideoApplication.class.getSimpleName();
|
|
public static BeibeiVideoApplication application = null;
|
public static String deviceName = null;
|
public static String deviceNumber = null;
|
public static String MMNumber;
|
public static IWXAPI mWxApi = null;
|
|
private static int mStatusBarHeight;
|
|
private static BeibeiVideoApplication instance;
|
|
public static BeibeiVideoApplication getInstance() {
|
return instance;
|
}
|
|
private static boolean inited = false;
|
|
//兼容4.4以下版本
|
protected void attachBaseContext(Context newBase) {
|
super.attachBaseContext(newBase);
|
MultiDex.install(this);
|
}
|
|
private static Handler handler = new Handler() {
|
@Override
|
public void handleMessage(Message msg) {
|
super.handleMessage(msg);
|
switch (msg.what) {
|
case 0:
|
if (authCodeCallBack != null)
|
BeibeiVideoAPI.getFuntvAuthCode(application, new BasicTextHttpResponseHandler() {
|
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optBoolean("IsPost")) {
|
String authCode = jsonObject.optString("Data");
|
if (!StringUtils.isNullOrEmpty(authCode)) {
|
SharedPreferences.Editor editor = application.getSharedPreferences("funtv", Context.MODE_PRIVATE).edit();
|
editor.putString("authCode", authCode);
|
editor.commit();
|
}
|
authCodeCallBack.onSuccess(authCode);
|
} else {
|
SharedPreferences share = application.getSharedPreferences("funtv", Context.MODE_PRIVATE);
|
String authCode = share.getString("authCode", "");
|
if (!StringUtils.isNullOrEmpty(authCode)) {
|
authCodeCallBack.onSuccess(authCode);
|
}
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
|
super.onFailure(statusCode, headers, responseString, throwable);
|
SharedPreferences share = application.getSharedPreferences("funtv", Context.MODE_PRIVATE);
|
String authCode = share.getString("authCode", "");
|
if (!StringUtils.isNullOrEmpty(authCode)) {
|
authCodeCallBack.onSuccess(authCode);
|
}
|
}
|
}
|
);
|
|
break;
|
|
}
|
}
|
};
|
|
|
private static IAuthCodeGetter.AuthCodeCallBack authCodeCallBack;
|
|
@Override
|
public void onCreate() {
|
if (BeibeiConstant.DEBUG) {
|
CrashHandler crashHandler = CrashHandler.getInstance();
|
crashHandler.init(getApplicationContext());
|
}
|
application = this;
|
instance = this;
|
MultiDex.install(this);
|
if (UserUtil.isAgreeUserProtocol(this) || BeibeiConstant.IS_TEST) {
|
//如果同意了用户协议
|
init(application);
|
}
|
}
|
|
|
public static boolean IsInited() {
|
return inited;
|
}
|
|
/**
|
* 静态初始化
|
*
|
* @param application
|
*/
|
public static void init(final Application application) {
|
Log.i(TAG, "系统初始化");
|
inited = true;
|
try {
|
TelephonyManager manager = (TelephonyManager) application.getSystemService(TELEPHONY_SERVICE);
|
Build bd = new Build();
|
String model = bd.MODEL;
|
BeibeiVideoApplication.deviceName = model;
|
BeibeiVideoApplication.deviceNumber = manager.getDeviceId();
|
} catch (Exception e) {
|
}
|
|
//友盟初始化
|
String description = ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL");
|
try {
|
UMConfigure.setLogEnabled(false);
|
UMConfigure.init(application, application.getResources().getString(R.string.umeng_key), description, UMConfigure.DEVICE_TYPE_PHONE, null);
|
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
|
} catch (Throwable e) {
|
|
}
|
// 选用AUTO页面采集模式
|
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
|
UMShareAPI.get(application);
|
PlatformConfig.setWeixin(BeibeiConstant.WECHAT_ID, BeibeiConstant.WECHAT_KEY);
|
PlatformConfig.setQQZone(BeibeiConstant.QQ_ID, BeibeiConstant.QQ_KEY);
|
PlatformConfig.setSinaWeibo(BeibeiConstant.SINA_ID, BeibeiConstant.SINA_KEY, "http://sns.whalecloud.com/sina2/callback");
|
|
ImageLoader.getInstance().init(buildDefaultILC(application));
|
initCSJAd(application);
|
try {
|
GDTAdSdk.init(application, BeibeiConstant.GDT_ID);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
initWX(application);
|
initX5(application);
|
//百度内容联盟
|
try {
|
AppActivity.setActionBarColorTheme(AppActivity.ActionBarColorTheme.ACTION_BAR_WHITE_THEME);
|
} catch (Exception e) {
|
|
}
|
}
|
|
|
private static void initWX(Context context) {
|
//AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换
|
mWxApi = WXAPIFactory.createWXAPI(context, BeibeiConstant.WECHAT_ID, true);
|
// 将该app注册到微信
|
mWxApi.registerApp(BeibeiConstant.WECHAT_ID);
|
context.registerReceiver(new BroadcastReceiver() {
|
@Override
|
public void onReceive(Context context, Intent intent) {
|
// 将该app注册到微信
|
mWxApi.registerApp(BeibeiConstant.WECHAT_ID);
|
}
|
}, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));
|
}
|
|
|
public static void initTaoKe(Application application, AlibcTradeInitCallback alibcTradeInitCallback) {
|
if (!AlibcTradeSDK.initState.isInitialized()) {
|
Toast.makeText(application, "初始化淘客", Toast.LENGTH_SHORT).show();
|
AlibcTradeSDK.asyncInit(application, alibcTradeInitCallback);
|
} else {
|
alibcTradeInitCallback.onSuccess();
|
}
|
}
|
|
|
private static ImageLoaderConfiguration buildDefaultILC(Context context) {
|
// This configuration tuning is custom. You can tune every option, you may tune some of them,
|
// or you can create default configuration by
|
// ImageLoaderConfiguration.createDefault(this); method.
|
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
|
config.threadPriority(Thread.NORM_PRIORITY - 2);
|
config.denyCacheImageMultipleSizesInMemory();
|
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
|
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
|
config.tasksProcessingOrder(QueueProcessingType.LIFO);
|
config.writeDebugLogs(); // Remove for release app
|
|
return config.build();
|
}
|
|
private static void initX5(Application application) {
|
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
|
|
@Override
|
public void onViewInitFinished(boolean arg0) {
|
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
|
Log.d(TAG, " onViewInitFinished is " + arg0);
|
}
|
|
@Override
|
public void onCoreInitFinished() {
|
// TODO Auto-generated method stub
|
}
|
};
|
//x5内核初始化接口
|
QbSdk.initX5Environment(application, cb);
|
QbSdk.canGetDeviceId(false);
|
QbSdk.canGetAndroidId(false);
|
QbSdk.canGetSubscriberId(false);
|
}
|
|
|
/**
|
* 穿山甲广告初始化
|
*/
|
private static void initCSJAd(Context context) {
|
TTAdManagerHolder.init(context);
|
}
|
|
|
class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
|
private int mFinalCount;
|
|
@Override
|
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
|
|
}
|
|
@Override
|
public void onActivityStarted(Activity activity) {
|
mFinalCount++;
|
//如果mFinalCount ==1,说明是从后台到前台
|
if (mFinalCount == 1) {
|
Log.e(TAG, "应用从后台切换到前台");
|
// 进入前台 改为热启动
|
//判断当前activity
|
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
|
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
|
if (!cn.getClassName().equalsIgnoreCase(SplashActivity.class.getName())) {
|
//小于30分钟不展示
|
// 测试
|
if (System.currentTimeMillis() - SplashADFragment.lastShowTime < 1000 * 60 * 30L)
|
return;
|
|
if (SplashADFragment.isAdLoaded()) {
|
startActivity(new Intent(getApplicationContext(), SplashAdActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
return;
|
}
|
|
AdUtil.AD_TYPE type1 = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.splashHotStart);
|
String pid1 = AdUtil.getAdPid(getApplicationContext(), AdPositionEnum.splashHotStart);
|
|
|
AdPidInfo adPidInfo1 = null;
|
AdPidInfo adPidInfo2 = null;
|
if (type1 != null) {
|
String defaultPid = null;
|
if (type1 == AdUtil.AD_TYPE.csj) {
|
defaultPid = CSJConstant.SPLASH_AD_HOT;
|
} else if (type1 == AdUtil.AD_TYPE.gdt) {
|
defaultPid = GDTConstant.PID_SPLASH_HOT;
|
}
|
if (StringUtils.isNullOrEmpty(pid1)) {
|
defaultPid = pid1;
|
}
|
adPidInfo1 = new AdPidInfo(type1, defaultPid);
|
if (type1 == AdUtil.AD_TYPE.csj) {
|
adPidInfo2 = new AdPidInfo(AdUtil.AD_TYPE.gdt, GDTConstant.PID_SPLASH_HOT);
|
} else if (type1 == AdUtil.AD_TYPE.gdt) {
|
adPidInfo2 = new AdPidInfo(AdUtil.AD_TYPE.csj, CSJConstant.SPLASH_AD_HOT);
|
}
|
}
|
|
|
SplashADFragment.loadAd(getApplicationContext(), adPidInfo1, adPidInfo2, null, null, true, new SplashADFragment.AdLoadResultListener() {
|
|
@Override
|
public void onAdLoad(SplashAdLoadInfo adLoadInfo) {
|
//展示广告
|
try {
|
startActivity(new Intent(getApplicationContext(), SplashAdActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
} catch (SecurityException e) {
|
|
} catch (Exception e) {
|
|
}
|
}
|
|
@Override
|
public void onNoAd() {
|
|
}
|
|
@Override
|
public void onClose() {
|
//广点通广告适用
|
//结束广告
|
//通过eventbus通知页面关闭
|
EventBus.getDefault().post(new SplashAdLoadInfo(null, 0));
|
}
|
});
|
}
|
|
}
|
}
|
|
@Override
|
public void onActivityResumed(Activity activity) {
|
|
}
|
|
@Override
|
public void onActivityPaused(Activity activity) {
|
|
}
|
|
@Override
|
public void onActivityStopped(Activity activity) {
|
mFinalCount--;
|
//如果mFinalCount ==0,说明是前台到后台
|
if (mFinalCount == 0) {
|
Log.e(TAG, "应用从前台切换到后台");
|
}
|
|
}
|
|
@Override
|
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
|
|
}
|
|
@Override
|
public void onActivityDestroyed(Activity activity) {
|
|
}
|
}
|
}
|