admin
2023-10-08 2c5b6e472c368e80d85b8ea2b461c9ea62981d9b
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoApplication.java
@@ -1,28 +1,44 @@
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.support.multidex.MultiDex;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.webkit.WebView;
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.fun.xm.FSPlayer;
import com.funshion.playsdk.callback.FunshionPlayInitCallback;
import com.bytedance.applog.AppLog;
import com.bytedance.applog.InitConfig;
import com.bytedance.applog.util.UriConstants;
import com.bytedance.sdk.dp.DPSdk;
import com.bytedance.sdk.dp.DPSdkConfig;
import com.bytedance.sdk.dp.IDPPrivacyController;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.funshion.playsdk.register.IAuthCodeGetter;
import com.kwad.sdk.api.KsAdSDK;
import com.kwad.sdk.api.KsCustomController;
import com.kwad.sdk.api.SdkConfig;
import com.lcjian.library.util.ManifestDataUtil;
import com.lcjian.library.util.common.DeviceUtil;
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.managers.setting.GlobalSetting;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
@@ -31,18 +47,38 @@
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.util.BeibeiConstant;
import com.weikou.beibeivideo.util.CrashHandler;
import com.weikou.beibeivideo.util.FunshionConstant;
import com.weikou.beibeivideo.util.DebuggerUtils;
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.GMAdManagerHolder;
import com.weikou.beibeivideo.util.ad.TTAdManagerHolder;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import com.yeshi.appupdate.util.PackageUtils2;
import org.apache.http.Header;
import org.greenrobot.eventbus.EventBus;
import org.json.JSONObject;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import androidx.multidex.MultiDex;
public class BeibeiVideoApplication extends Application {
    private final String TAG = BeibeiVideoApplication.class.getName();
    private final static String TAG = BeibeiVideoApplication.class.getSimpleName();
    public static BeibeiVideoApplication application = null;
    public static String deviceName = null;
@@ -58,7 +94,36 @@
        return instance;
    }
    private Handler handler = new Handler() {
    private static boolean inited = false;
    private static List<Activity> mActivitys = Collections.synchronizedList(new LinkedList<Activity>());
    public static void pushActivity(Activity activity) {
        mActivitys.add(activity);
    }
    public static void popActivity(Activity activity) {
        mActivitys.remove(activity);
    }
    public static void finishAllActivity() {
        if (mActivitys == null) {
            return;
        }
        for (Activity activity : mActivitys) {
            activity.finish();
        }
        mActivitys.clear();
    }
    //兼容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);
@@ -105,7 +170,7 @@
    };
    private IAuthCodeGetter.AuthCodeCallBack authCodeCallBack;
    private static IAuthCodeGetter.AuthCodeCallBack authCodeCallBack;
    @Override
    public void onCreate() {
@@ -115,65 +180,99 @@
        }
        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) {
        MultiDex.install(this);
        if (UserUtil.isAgreeUserProtocol(this) || BeibeiConstant.IS_TEST) {
            //如果同意了用户协议
            init(application, null);
        }
        //百度内容联盟
        try {
            AppActivity.setActionBarColorTheme(AppActivity.ActionBarColorTheme.ACTION_BAR_BLACK_THEME);
        } catch (Exception e) {
        }
    }
    private void initWX() {
    public static boolean IsInited() {
        return inited;
    }
    /**
     * 静态初始化
     *
     * @param application
     */
    public static void init(final Application application, InitListener initListener) {
        Log.i(TAG, "系统初始化");
        inited = true;
        registerActivityListener(application);
        //防止动态代码注入
        DebuggerUtils.checkDebuggableInNotDebugModel(application);
        try {
            Build bd = new Build();
            String model = bd.MODEL;
            BeibeiVideoApplication.deviceName = model;
            BeibeiVideoApplication.deviceNumber = DeviceUtil.getImeiCache(application);
        } catch (Exception e) {
        }
        //解决错误:Using WebView from more than one process at once with the same data directory is not supported
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            String processName = getProcessName(application);
            String packageName = application.getPackageName();
            if (!packageName.equals(processName)) {
                WebView.setDataDirectorySuffix(processName);
            }
        }
        //友盟初始化
        String description = ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL");
        try {
            UMConfigure.setLogEnabled(false);
            UMConfigure.submitPolicyGrantResult(application, false);
            UMConfigure.init(application, application.getResources().getString(R.string.umeng_key), description, UMConfigure.DEVICE_TYPE_PHONE, null);
            // 选用AUTO页面采集模式
            MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
            UMConfigure.submitPolicyGrantResult(application, false);
        } catch (Throwable e) {
        }
        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, initListener);
        initKSSDK(application);
        try {
            GlobalSetting.setEnableCollectAppInstallStatus(false);
            GDTAdSdk.init(application, BeibeiConstant.GDT_ID);
        } catch (Exception e) {
            e.printStackTrace();
        }
        initWX(application);
        initX5(application);
    }
    private static String getProcessName(Context context) {
        if (context == null) return null;
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == android.os.Process.myPid()) {
                return processInfo.processName;
            }
        }
        return null;
    }
    private static void initWX(Context context) {
        //AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换
        mWxApi = WXAPIFactory.createWXAPI(this, BeibeiConstant.WECHAT_ID, true);
        mWxApi = WXAPIFactory.createWXAPI(context, BeibeiConstant.WECHAT_ID, true);
        // 将该app注册到微信
        mWxApi.registerApp(BeibeiConstant.WECHAT_ID);
        registerReceiver(new BroadcastReceiver() {
        context.registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // 将该app注册到微信
@@ -183,23 +282,17 @@
    }
    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);
            }
        });
    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 ImageLoaderConfiguration buildDefaultILC(Context context) {
    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.
@@ -214,12 +307,11 @@
        return config.build();
    }
    private void initX5() {
    private static void initX5(Application application) {
        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);
            }
@@ -230,14 +322,328 @@
            }
        };
        //x5内核初始化接口
        QbSdk.initX5Environment(getApplicationContext(), cb);
        QbSdk.initX5Environment(application, cb);
    }
    /**
     * 穿山甲广告初始化
     */
    private void initCSJAd() {
        TTAdManagerHolder.init(this);
    private static void initCSJAd(Application context, InitListener initListener) {
        TTAdManagerHolder.init(context, new TTAdSdk.Callback() {
            @Override
            public void success() {
                if (initListener != null)
                    initListener.onFinish();
                initDPSDK(context);
            }
            @Override
            public void fail(int i, String s) {
                if (initListener != null)
                    initListener.onFinish();
            }
        });
    }
    //快手初始化
    public static void initKSSDK(Context appContext) {
        if (!AdUtil.isCanInitCSJ()) {
            return;
        }
        KsAdSDK.init(appContext, new SdkConfig.Builder()
                .appId("801000001") // 测试aapId,请联系快⼿平台申请正式AppId,必填
                .appName(appContext.getString(R.string.app_name)) // 测试appName,请填写您应⽤的名称,⾮必填
                .showNotification(true) // 是否展示下载通知栏
                .debug(false)
                .customController(new KsCustomController() {
                    @Override
                    public boolean canReadLocation() {
                        return false;
                    }
                    @Override
                    public boolean canUsePhoneState() {
                        return false;
                    }
                    @Override
                    public boolean canUseOaid() {
                        return false;
                    }
                    @Override
                    public String getImei() {
                        return DeviceUtil.getImeiCache(appContext);
                    }
                    @Override
                    public boolean canUseMacAddress() {
                        return false;
                    }
                    @Override
                    public boolean canReadInstalledPackages() {
                        return false;
                    }
                    @Override
                    public List<String> getInstalledPackages() {
                        return DeviceUtil.getInstalledPackageNamesCache(appContext);
                    }
                })// 是否开启sdk 调试⽇志 可选
                .build());
    }
    private static boolean dpSDKIninted;
    public static void initDPSDK(Application application) {
        if (!AdUtil.isCanInitCSJ()) {
            return;
        }
        /* 初始化开始 */
        final InitConfig config = new InitConfig("5095354", ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL")); // appid和渠道,appid如不清楚请联系客户成功经理,注意第二个参数 channel 不能为空
        config.setUriConfig(UriConstants.DEFAULT);//上报地址
// 加密开关,SDK 5.5.1 及以上版本支持,false 为关闭加密,上线前建议设置为 true
        AppLog.setEncryptAndCompress(true);
        config.setAutoStart(true);
        AppLog.init(application, config);
        /* 初始化结束 */
        if (!dpSDKIninted) {
            DPSdkConfig.Builder configBuilder = new DPSdkConfig.Builder()
                    .debug(false)
                    .privacyController(new IDPPrivacyController() {
                        @Override
                        public boolean isCanUsePhoneState() {
                            return false;
                        }
                        @Override
                        public String getImei() {
                            return DeviceUtil.getImeiCache(application);
                        }
                        @Override
                        public String getImsi() {
                            return DeviceUtil.getImsiCache(application);
                        }
                        @Override
                        public boolean isCanUseAndroidId() {
                            return false;
                        }
                        @Override
                        public String getAndroidId() {
                            return super.getAndroidId();
                        }
                    });
//                    .initListener(new DPSdkConfig.InitListener() {
//                        @Override
//                        public void onInitComplete(boolean b, String s) {
//                            dpSDKIninted = b;
//                        }
//                    }) //接入了红包功能需要传入的参数,没有接入的话可以忽略该配置
//                    .luckConfig(new DPSdkConfig.LuckConfig().application(application).enableLuck(false))
//                    .liveConfig(new DPSdkConfig.LiveConfig())
                    //若您需要接入直播,参考「直播接入文档」;否则可忽略此参数。
            try {
                DPSdk.init(application, "SDK_Setting_5095354.json", configBuilder.build());
                DPSdk.start(new DPSdk.StartListener() {
                    @Override
                    public void onStartComplete(boolean b, String s) {
                        dpSDKIninted = b;
                        Log.i(TAG," DPSdk.start:"+b+", "+s);
                    }
                });
            } catch (Exception e) {
            }
        }
    }
    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 onAdClick() {
                        }
                        @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) {
        }
    }
    public interface InitListener {
        public void onFinish();
    }
    private static void registerActivityListener(Application application) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            application.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                    /**
                     *  监听到 Activity创建事件 将该 Activity 加入list
                     */
                    pushActivity(activity);
                }
                @Override
                public void onActivityStarted(Activity activity) {
                }
                @Override
                public void onActivityResumed(Activity activity) {
                }
                @Override
                public void onActivityPaused(Activity activity) {
                }
                @Override
                public void onActivityStopped(Activity activity) {
                }
                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                }
                @Override
                public void onActivityDestroyed(Activity activity) {
                    if (null==mActivitys||mActivitys.isEmpty()) {
                        return;
                    }
                    if (mActivitys.contains(activity)) {
                        /**
                         *  监听到 Activity销毁事件 将该Activity 从list中移除
                         */
                        popActivity(activity);
                    }
                }
            });
        }
    }
}