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.Bundle; import android.os.Handler; import android.os.Message; import android.support.multidex.MultiDex; import android.util.Log; import com.alibaba.baichuan.android.trade.AlibcTradeSDK; import com.alibaba.baichuan.android.trade.callback.AlibcTradeInitCallback; import com.baidu.mobads.AppActivity; import com.fun.xm.FSPlayer; import com.funshion.playsdk.callback.FunshionPlayInitCallback; 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.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.FunshionConstant; 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 com.yeshi.push.PushUtil; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import de.greenrobot.event.EventBus; public class BeibeiVideoApplication extends Application { private final String TAG = BeibeiVideoApplication.class.getName(); 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 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 IAuthCodeGetter.AuthCodeCallBack authCodeCallBack; @Override public void onCreate() { if (BeibeiConstant.DEBUG) { CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext()); } this.registerActivityLifecycleCallbacks(new MyActivityLifecycleCallbacks()); application = this; MultiDex.install(this); //友盟初始化 String description = ManifestDataUtil.getAppMetaData(this, "UMENG_CHANNEL"); UMConfigure.init(this, getResources().getString(R.string.umeng_key), description, UMConfigure.DEVICE_TYPE_PHONE, null); // 选用AUTO页面采集模式 MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); UMShareAPI.get(this); 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"); super.onCreate(); instance = this; ImageLoader.getInstance().init(buildDefaultILC(this)); // initX5(); initCSJAd(); GDTADManager.getInstance().initWith(this, BeibeiConstant.GDT_ID); initWX(); initTaoKe(); try { //初始化播放插件 FSPlayer.init(this, FunshionConstant.APP_ID, new IAuthCodeGetter() { @Override public void getAuthCode(AuthCodeCallBack authCodeCallBack) { BeibeiVideoApplication.this.authCodeCallBack = authCodeCallBack; handler.sendEmptyMessage(0); } }, new FunshionPlayInitCallback() { @Override public void onSuccess() { Log.i(TAG, "风行播放器初始化成功"); } @Override public void onFail(int i, String s) { Log.i(TAG, "风行播放器初始化失败:" + i + "-" + s); } }); } catch (Exception e) { } //百度内容联盟 try { AppActivity.setActionBarColorTheme(AppActivity.ActionBarColorTheme.ACTION_BAR_WHITE_THEME); } catch (Exception e) { } //推送 PushUtil.inintPush(this, new PushUtil.ITokenListener() { @Override public void onToken(String romType, String regId) { BeibeiVideoAPI.pushBindToken(application, romType, regId, new BasicTextHttpResponseHandler() { @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { } }, true); } }); Intent intent = new Intent(this, PushOpenClickActivity.class); intent.putExtra("activity", "test"); JSONObject params = new JSONObject(); try { params.put("id", "123123"); } catch (JSONException e) { e.printStackTrace(); } intent.putExtra("params", params.toString()); String uriString = intent.toUri(Intent.URI_INTENT_SCHEME); Log.i(TAG, uriString); } private void initWX() { //AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换 mWxApi = WXAPIFactory.createWXAPI(this, BeibeiConstant.WECHAT_ID, true); // 将该app注册到微信 mWxApi.registerApp(BeibeiConstant.WECHAT_ID); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 将该app注册到微信 mWxApi.registerApp(BeibeiConstant.WECHAT_ID); } }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP)); } private void initTaoKe() { AlibcTradeSDK.asyncInit(this, new AlibcTradeInitCallback() { @Override public void onSuccess() { } @Override public void onFailure(int code, String msg) { Log.i(TAG, "百川初始化失败:" + code + "-" + msg); } }); } private 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 void initX5() { QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { @Override public void onViewInitFinished(boolean arg0) { // TODO Auto-generated method stub //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。 Log.d(TAG, " onViewInitFinished is " + arg0); } @Override public void onCoreInitFinished() { // TODO Auto-generated method stub } }; //x5内核初始化接口 QbSdk.initX5Environment(getApplicationContext(), cb); } /** * 穿山甲广告初始化 */ private void initCSJAd() { TTAdManagerHolder.init(this); } 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) { } } }