257579b8c1889b8c4205b8ff6b74c2f062c54f38.svn-base 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package eVVM.apk.app;
  2. import android.app.Application;
  3. import android.content.Context;
  4. import android.support.multidex.MultiDex;
  5. import com.allen.library.RxHttpUtils;
  6. import com.allen.library.config.OkHttpConfig;
  7. import com.allen.library.cookie.store.SPCookieStore;
  8. import com.allen.library.interfaces.BuildHeadersListener;
  9. import com.hjq.image.ImageLoader;
  10. import com.hjq.toast.ToastUtils;
  11. import com.tianma.netdetector.lib.NetStateChangeReceiver;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. import cn.bingoogolapple.swipebacklayout.BGASwipeBackHelper;
  15. import cn.jpush.android.api.JPushInterface;
  16. import eVVM.apk.api.ApiUrl;
  17. import eVVM.apk.helper.SPUtils;
  18. import eVVM.apk.other.EventBusManager;
  19. import okhttp3.OkHttpClient;
  20. public class MyApplication extends Application {
  21. private static Application app = null;
  22. @Override
  23. public void onCreate() {
  24. super.onCreate();
  25. app = this;
  26. NetStateChangeReceiver.registerReceiver(this);
  27. initSDK(this);
  28. }
  29. /**
  30. * 初始化一些第三方框架
  31. */
  32. public static void initSDK(Application application) {
  33. /**
  34. * 必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回
  35. * 第一个参数:应用程序上下文
  36. * 第二个参数:如果发现滑动返回后立即触摸界面时应用崩溃,请把该界面里比较特殊的 View 的 class 添加到该集合中,目前在库中已经添加了 WebView 和 SurfaceView
  37. */
  38. BGASwipeBackHelper.init(application, null);
  39. // 初始化吐司工具类
  40. ToastUtils.init(application);
  41. // 初始化图片加载器
  42. ImageLoader.init(application);
  43. SPUtils.getInstance().init(application);
  44. // 初始化 EventBus
  45. EventBusManager.init();
  46. // 初始化友盟 SDK
  47. // UmengClient.init(application);
  48. //初始化网络请求框架 RxHttpUtils :rxjava2+retrofit+okhttp3组合封装
  49. OkHttpClient okHttpClient = new OkHttpConfig
  50. .Builder(application)
  51. //全局的请求头信息
  52. .setHeaders(new BuildHeadersListener() {
  53. @Override
  54. public Map<String, String> buildHeaders() {
  55. String user_token = (String) SPUtils.get("USER_TOKEN", "");
  56. HashMap<String, String> hashMap = new HashMap<>();
  57. /*hashMap.put("appVersion", BuildConfig.VERSION_NAME);
  58. hashMap.put("client", "android");
  59. hashMap.put("channelId", "channelId");//渠道
  60. hashMap.put("networkType", "networkType");//网络类型
  61. hashMap.put("platform", "platform");//平台
  62. hashMap.put("sysVersion", "sysVersion");//系统版本号
  63. hashMap.put("device", "device");//设备信息
  64. hashMap.put("screen", "screen");//屏幕大小
  65. hashMap.put("uuid", "uuid");//设备唯一码
  66. hashMap.put("version", "version");//app版本
  67. hashMap.put("apiVersion", "apiVersion");//api版本*/
  68. hashMap.put("Authorization", "Bearer" + user_token);
  69. //hashMap.put("other_header", URLEncoder.encode("中文需要转码"));
  70. return hashMap;
  71. }
  72. })
  73. //开启缓存策略(默认false)
  74. //1、在有网络的时候,先去读缓存,缓存时间到了,再去访问网络获取数据;
  75. //2、在没有网络的时候,去读缓存中的数据。
  76. .setCache(true)
  77. .setHasNetCacheTime(10)//默认有网络时候缓存60秒
  78. .setNoNetCacheTime(3600)//默认有网络时候缓存3600秒
  79. //全局持久话cookie,保存到内存(new MemoryCookieStore())或者保存到本地(new SPCookieStore(this))
  80. //不设置的话,默认不对cookie做处理
  81. .setCookieType(new SPCookieStore(application))
  82. //可以添加自己的拦截器(比如使用自己熟悉三方的缓存库等等)
  83. //.setAddInterceptor(null)
  84. //全局ssl证书认证
  85. //1、信任所有证书,不安全有风险(默认信任所有证书)
  86. //.setSslSocketFactory()
  87. //2、使用预埋证书,校验服务端证书(自签名证书)
  88. //.setSslSocketFactory(cerInputStream)
  89. //3、使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书)
  90. //.setSslSocketFactory(bksInputStream,"123456",cerInputStream)
  91. //全局超时配置
  92. .setReadTimeout(10)
  93. //全局超时配置
  94. .setWriteTimeout(10)
  95. //全局超时配置
  96. .setConnectTimeout(10)
  97. //全局是否打开请求log日志
  98. .setDebug(true)
  99. .build();
  100. /* //一个项目多url的配置方法(这种写法的前提是事先已经知道所有的baseUrl了)
  101. RxUrlManager.getInstance().setMultipleUrl(urlMap);
  102. //如果是动态从服务器获取的baseUrl的话也可以添加进来
  103. // key是对url做区分使用,value就是服务器下发的baseUrl(baseUrl必须以"xxx/"斜杠结尾,retrofit的要求)
  104. RxUrlManager.getInstance().addUrl("urlKey", "urlValue");
  105. */
  106. RxHttpUtils
  107. .getInstance()
  108. .init(application)
  109. .config()
  110. //使用自定义factory的用法
  111. //.setCallAdapterFactory(RxJava2CallAdapterFactory.create())
  112. //.setConverterFactory(ScalarsConverterFactory.create(),GsonConverterFactory.create(GsonAdapter.buildGson()))
  113. //配置全局baseUrl
  114. .setBaseUrl(ApiUrl.BASE_URL)
  115. //开启全局配置
  116. .setOkClient(okHttpClient);
  117. JPushInterface.setDebugMode(true);
  118. JPushInterface.init(application);
  119. }
  120. /**
  121. * 获取Application的Context
  122. **/
  123. public static Context getAppContext() {
  124. if (app == null)
  125. return null;
  126. return app.getApplicationContext();
  127. }
  128. @Override
  129. protected void attachBaseContext(Context base) {
  130. super.attachBaseContext(base);
  131. // 使用 Dex分包
  132. MultiDex.install(this);
  133. }
  134. }