package eVVM.apk.app; import android.app.Application; import android.content.Context; import android.support.multidex.MultiDex; import com.allen.library.RxHttpUtils; import com.allen.library.config.OkHttpConfig; import com.allen.library.cookie.store.SPCookieStore; import com.allen.library.interfaces.BuildHeadersListener; import com.hjq.image.ImageLoader; import com.hjq.toast.ToastUtils; import java.util.HashMap; import java.util.Map; import cn.bingoogolapple.swipebacklayout.BGASwipeBackHelper; import cn.jpush.android.api.JPushInterface; import eVVM.apk.api.ApiUrl; import eVVM.apk.helper.SPUtils; import eVVM.apk.other.EventBusManager; import okhttp3.OkHttpClient; public class MyApplication extends Application { private static Application app = null; @Override public void onCreate() { super.onCreate(); app = this; initSDK(this); } /** * 初始化一些第三方框架 */ public static void initSDK(Application application) { /** * 必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回 * 第一个参数:应用程序上下文 * 第二个参数:如果发现滑动返回后立即触摸界面时应用崩溃,请把该界面里比较特殊的 View 的 class 添加到该集合中,目前在库中已经添加了 WebView 和 SurfaceView */ BGASwipeBackHelper.init(application, null); // 初始化吐司工具类 ToastUtils.init(application); // 初始化图片加载器 ImageLoader.init(application); SPUtils.getInstance().init(application); // 初始化 EventBus EventBusManager.init(); // 初始化友盟 SDK // UmengClient.init(application); //初始化网络请求框架 RxHttpUtils :rxjava2+retrofit+okhttp3组合封装 OkHttpClient okHttpClient = new OkHttpConfig .Builder(application) //全局的请求头信息 .setHeaders(new BuildHeadersListener() { @Override public Map buildHeaders() { String user_token = (String) SPUtils.get("USER_TOKEN", ""); HashMap hashMap = new HashMap<>(); /*hashMap.put("appVersion", BuildConfig.VERSION_NAME); hashMap.put("client", "android"); hashMap.put("channelId", "channelId");//渠道 hashMap.put("networkType", "networkType");//网络类型 hashMap.put("platform", "platform");//平台 hashMap.put("sysVersion", "sysVersion");//系统版本号 hashMap.put("device", "device");//设备信息 hashMap.put("screen", "screen");//屏幕大小 hashMap.put("uuid", "uuid");//设备唯一码 hashMap.put("version", "version");//app版本 hashMap.put("apiVersion", "apiVersion");//api版本*/ hashMap.put("Authorization", "Bearer" + user_token); //hashMap.put("other_header", URLEncoder.encode("中文需要转码")); return hashMap; } }) //开启缓存策略(默认false) //1、在有网络的时候,先去读缓存,缓存时间到了,再去访问网络获取数据; //2、在没有网络的时候,去读缓存中的数据。 .setCache(true) .setHasNetCacheTime(10)//默认有网络时候缓存60秒 .setNoNetCacheTime(3600)//默认有网络时候缓存3600秒 //全局持久话cookie,保存到内存(new MemoryCookieStore())或者保存到本地(new SPCookieStore(this)) //不设置的话,默认不对cookie做处理 .setCookieType(new SPCookieStore(application)) //可以添加自己的拦截器(比如使用自己熟悉三方的缓存库等等) //.setAddInterceptor(null) //全局ssl证书认证 //1、信任所有证书,不安全有风险(默认信任所有证书) //.setSslSocketFactory() //2、使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(cerInputStream) //3、使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(bksInputStream,"123456",cerInputStream) //全局超时配置 .setReadTimeout(10) //全局超时配置 .setWriteTimeout(10) //全局超时配置 .setConnectTimeout(10) //全局是否打开请求log日志 .setDebug(true) .build(); /* //一个项目多url的配置方法(这种写法的前提是事先已经知道所有的baseUrl了) RxUrlManager.getInstance().setMultipleUrl(urlMap); //如果是动态从服务器获取的baseUrl的话也可以添加进来 // key是对url做区分使用,value就是服务器下发的baseUrl(baseUrl必须以"xxx/"斜杠结尾,retrofit的要求) RxUrlManager.getInstance().addUrl("urlKey", "urlValue"); */ RxHttpUtils .getInstance() .init(application) .config() //使用自定义factory的用法 //.setCallAdapterFactory(RxJava2CallAdapterFactory.create()) //.setConverterFactory(ScalarsConverterFactory.create(),GsonConverterFactory.create(GsonAdapter.buildGson())) //配置全局baseUrl .setBaseUrl(ApiUrl.BASE_URL) //开启全局配置 .setOkClient(okHttpClient); JPushInterface.setDebugMode(true); JPushInterface.init(application); } /** * 获取Application的Context **/ public static Context getAppContext() { if (app == null) return null; return app.getApplicationContext(); } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); // 使用 Dex分包 MultiDex.install(this); } }