package com.demo.app; import android.Manifest; import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.bytedance.sdk.dp.DPSdkConfig; import com.bytedance.sdk.openadsdk.TTAdSdk; import com.demo.app.utils.Constant; import com.demo.app.utils.UserUtil; import com.demo.app.utils.api.HttpApiUtil; import com.demo.lib.common.util.ui.MyActivityManager; import com.demo.library_ad.AdUtil; import com.demo.library_dp.DPUtil; import com.demo.lib.common.util.ManifestDataUtil; import com.demo.library_flutter.FlutterCommonActivity; import com.demo.library_flutter.message.AdMethodChannel; import com.demo.library_flutter.message.DataMethodChannel; import com.demo.library_flutter.message.UIMethodChannel; import com.demo.library_flutter.nativeview.CSJExpressNativeViewFactory; import com.demo.library_flutter.nativeview.GDTExpressNativeViewFactory; import com.idlefish.flutterboost.FlutterBoost; import com.idlefish.flutterboost.FlutterBoostDelegate; import com.idlefish.flutterboost.FlutterBoostRouteOptions; import com.idlefish.flutterboost.FlutterBoostSetupOptions; import com.idlefish.flutterboost.containers.FlutterBoostActivity; import com.umeng.analytics.MobclickAgent; import com.umeng.commonsdk.UMConfigure; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.multidex.MultiDex; import io.flutter.Log; import io.flutter.app.FlutterApplication; import io.flutter.embedding.android.FlutterActivityLaunchConfigs; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.StandardMessageCodec; import io.flutter.plugin.platform.PlatformViewRegistry; public class MyApplication extends Application { public static MyApplication application = null; public static boolean inited = false; private static String TAG = "MyApplication"; //兼容4.4以下版本 protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); MultiDex.install(this); } @Override public void onCreate() { super.onCreate(); application = this; MultiDex.install(this); if (UserUtil.isAgreeUserProtocol(application) || Constant.DEBUG) { init(application, null); } } public static void init(Application application, InitListener initListener) { if (inited) { return; } inited = true; //友盟初始化 String description = ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL"); UMConfigure.init(application, application.getResources().getString(R.string.umeng_key), description, UMConfigure.DEVICE_TYPE_PHONE, null); UMConfigure.setEncryptEnabled(true); // 选用AUTO页面采集模式 MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); initAd(application, initListener); //小说 // initNovel(application); //穿山甲小视频 // initDPSDK(application); initFlutter(application); } //动态初始化广告 public static void initAd(Application application, InitListener initListener) { //广点通广告 AdUtil.initGDTAd(application, application.getString(R.string.ad_gdt_appid)); //穿山甲广告 initCSJAd(application, application.getString(R.string.ad_csj_appid), initListener); } /** * 穿山甲广告初始化 */ private static void initCSJAd(Application application, String appId, InitListener initListener) { AdUtil.initCSJAd(application, appId, false, new TTAdSdk.InitCallback() { @Override public void success() { if (initListener != null) initListener.onFinish(); } @Override public void fail(int i, String s) { if (initListener != null) initListener.onFinish(); } }); } private static void initNovel(Application application) { DPUtil.initNovel(application, "SDK_Setting_5211168.json"); } private static boolean dpSDKIninted; public static void initDPSDK(Application application) { if (!dpSDKIninted) { DPUtil.initDPSDK(application, "SDK_Setting_5211168.json", new DPSdkConfig.InitListener() { @Override public void onInitComplete(boolean b) { dpSDKIninted = b; } }); } } public static void initFlutter(Application application) { FlutterBoostSetupOptions options = new FlutterBoostSetupOptions.Builder().build(); FlutterBoost.instance().setup(application, new FlutterBoostDelegate() { @Override public void pushNativeRoute(FlutterBoostRouteOptions options) { Log.i(TAG, "pushNativeRoute"); // options.arguments() //这里根据options.pageName来判断你想跳转哪个页面,这里简单给一个 // Intent intent = new Intent(FlutterBoost.instance().currentActivity(), FlutterCommonActivity.class); // intent.putExtra("pageRoute", options.pageName()); // FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode()); Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterCommonActivity.class) .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent) .destroyEngineWithActivity(false) .uniqueId(options.uniqueId()) .url(options.pageName()) .urlParams(options.arguments()) .build(FlutterBoost.instance().currentActivity()); FlutterBoost.instance().currentActivity().startActivity(intent); } @Override public void pushFlutterRoute(FlutterBoostRouteOptions options) { Log.i(TAG, "pushFlutterRoute"); Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class) .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent) .destroyEngineWithActivity(false) .uniqueId(options.uniqueId()) .url(options.pageName()) .urlParams(options.arguments()) .build(FlutterBoost.instance().currentActivity()); FlutterBoost.instance().currentActivity().startActivity(intent); } @Override public boolean popRoute(FlutterBoostRouteOptions options) { Log.i(TAG, "popRoute"); return false; } }, engine -> { PlatformViewRegistry registry = engine.getPlatformViewsController().getRegistry(); registry.registerViewFactory("ad-csj-express-view", new CSJExpressNativeViewFactory(engine.getDartExecutor().getBinaryMessenger(), StandardMessageCodec.INSTANCE)); registry.registerViewFactory("ad-gdt-express-view", new GDTExpressNativeViewFactory(engine.getDartExecutor().getBinaryMessenger(), StandardMessageCodec.INSTANCE)); //数据接口 new DataMethodChannel(engine.getDartExecutor().getBinaryMessenger(), application.getApplicationContext(), new DataMethodChannel.DataListener() { @Override public Map getBaseRequestParams(Map params) { LinkedHashMap ps = new LinkedHashMap<>(); if (params != null) for (Iterator its = params.keySet().iterator(); its.hasNext(); ) { String key = its.next(); if (params.get(key) != null) { ps.put(key, params.get(key).toString()); } } HttpApiUtil.getRequestParams(application.getApplicationContext(), ps); return null; } }); //UI接口 new UIMethodChannel(engine.getDartExecutor().getBinaryMessenger(), application.getApplicationContext(), new UIMethodChannel.DataListener() { @Override public boolean isStatusBarDefaultLight() { return true; } }); // //广告接口 new AdMethodChannel(engine.getDartExecutor().getBinaryMessenger(), application.getApplicationContext(), new AdMethodChannel.DataListener() { }); }, options); } public interface InitListener { public void onFinish(); } }