MyApplication.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. package com.xzjmyk.pm.activity;
  2. import android.app.Application;
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Bitmap.Config;
  6. import android.os.Build;
  7. import android.os.Environment;
  8. import android.os.Handler;
  9. import android.os.StrictMode;
  10. import android.support.multidex.MultiDex;
  11. import android.text.TextUtils;
  12. import android.util.Log;
  13. import com.android.volley.RequestQueue;
  14. import com.android.volley.toolbox.Volley;
  15. import com.baidu.mapapi.SDKInitializer;
  16. import com.facebook.stetho.Stetho;
  17. import com.lidroid.xutils.DbUtils;
  18. import com.lidroid.xutils.HttpUtils;
  19. import com.nostra13.universalimageloader.cache.disc.impl.TotalSizeLimitedDiscCache;
  20. import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
  21. import com.nostra13.universalimageloader.cache.memory.MemoryCacheAware;
  22. import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
  23. import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
  24. import com.nostra13.universalimageloader.core.DisplayImageOptions;
  25. import com.nostra13.universalimageloader.core.ImageLoader;
  26. import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
  27. import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
  28. import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
  29. import com.umeng.analytics.MobclickAgent;
  30. import com.umeng.socialize.PlatformConfig;
  31. import com.uuzuche.lib_zxing.activity.ZXingLibrary;
  32. import com.xzjmyk.pm.activity.bean.ConfigBean;
  33. import com.xzjmyk.pm.activity.bean.User;
  34. import com.xzjmyk.pm.activity.db.SQLiteHelper;
  35. import com.xzjmyk.pm.activity.ui.SplashActivity;
  36. import com.xzjmyk.pm.activity.ui.me.TimeStatisticsActivity;
  37. import com.xzjmyk.pm.activity.util.Constants;
  38. import com.xzjmyk.pm.activity.util.PreferenceUtils;
  39. import com.xzjmyk.pm.activity.util.SharedUtil;
  40. import com.xzjmyk.pm.activity.util.TimeUtils;
  41. import com.xzjmyk.pm.activity.volley.FastVolley;
  42. import org.apache.http.cookie.Cookie;
  43. import java.io.File;
  44. import java.util.HashMap;
  45. import java.util.Map;
  46. import cat.ereza.customactivityoncrash.CustomActivityOnCrash;
  47. public class MyApplication extends Application {
  48. /**
  49. * @注释:记录Cookie
  50. */
  51. public String JSESSION_B2B;
  52. public static Cookie cookie;
  53. public static Cookie cookieERP;
  54. public static RequestQueue mRequestQueue;
  55. public static HttpUtils mHttpUtils;
  56. public static DbUtils mDbUtils;
  57. private static MyApplication INSTANCE = null;
  58. public static MyApplication getInstance() {
  59. return INSTANCE;
  60. }
  61. @Override
  62. public void onCreate() {
  63. super.onCreate();
  64. //内存泄漏检测工具初始化
  65. /*if (AppConfig.DEBUG){
  66. if (LeakCanary.isInAnalyzerProcess(this)) {
  67. // This process is dedicated to LeakCanary for heap analysis.
  68. // You should not init your app in this process.
  69. return;
  70. }
  71. LeakCanary.install(this);
  72. }*/
  73. //Stetho调试工具初始化
  74. Stetho.initializeWithDefaults(this);
  75. //自定义闪退页面初始化
  76. CustomActivityOnCrash.install(this);
  77. //设置ErrorActivity在后台启动,默认为true
  78. CustomActivityOnCrash.setLaunchErrorActivityWhenInBackground(true);
  79. //设置展示详细错误信息,默认为true
  80. CustomActivityOnCrash.setShowErrorDetails(true);
  81. //启用APP Restart,默认为true
  82. CustomActivityOnCrash.setEnableAppRestart(true);
  83. //设置重新启动的activity
  84. CustomActivityOnCrash.setRestartActivityClass(SplashActivity.class);
  85. INSTANCE = this;
  86. ZXingLibrary.initDisplayOpinion(this);
  87. mRequestQueue = Volley.newRequestQueue(this);
  88. mHttpUtils = new HttpUtils();
  89. configHttpUtils();
  90. SharedUtil.init(this);
  91. initShareAPI();
  92. // CrashReport.initCrashReport(getApplicationContext(), "900050585", false);
  93. PreferenceUtils.putBoolean(this, Constants.IS_NOTIFICATION, false);//不进行通知
  94. new Handler().postDelayed(new Runnable() {
  95. @Override
  96. public void run() {
  97. //定位场景设置
  98. MobclickAgent.setScenarioType(MyApplication.this, MobclickAgent.EScenarioType.E_UM_NORMAL);
  99. SDKInitializer.initialize(getApplicationContext());
  100. // 初始化数据库
  101. SQLiteHelper.copyDatabaseFile(getApplicationContext());
  102. //TODO
  103. // 初始化定位
  104. getBdLocationHelper();
  105. // 初始化App目录
  106. initAppDir();
  107. // 初始化图片加载
  108. initImageLoader();
  109. }
  110. }, 1);
  111. if (AppConfig.DEBUG) {
  112. Log.d(AppConfig.TAG, "MyApplication onCreate");
  113. }
  114. if (AppConfig.DEBUG) {
  115. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
  116. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
  117. }
  118. // 初始化网络监听
  119. mNetWorkObservable = new NetWorkObservable(this);
  120. // LogUtil.d("applications",AndroidUtils.getEthernetMacAddress());
  121. // LogUtil.d("applications",AndroidUtils.getAndroidId(this));
  122. // LogUtil.d("applications",AndroidUtils.getWifiMacAddress(this));
  123. }
  124. /**
  125. * @desc:初始化分享组件
  126. * @author:Arison on 2016/9/29
  127. */
  128. public void initShareAPI() {
  129. PlatformConfig.setWeixin("wx2539cc96bf158e00", "b057aa3e807ba7c505a2f03cc541bbf6");
  130. PlatformConfig.setSinaWeibo("493318722", "7def652c3683603b08bab87d34b1f944");
  131. PlatformConfig.setQQZone("1104894295", "Nk8zMIz5YSqwRQ1F");
  132. }
  133. /**
  134. * 为HttpUtils配置参数
  135. */
  136. private void configHttpUtils() {
  137. mHttpUtils.configRequestThreadPoolSize(4);
  138. mHttpUtils.configRequestRetryCount(3);
  139. mHttpUtils.configResponseTextCharset("utf-8");
  140. mHttpUtils.configTimeout(10000);
  141. }
  142. /**
  143. * 在程序内部关闭时,调用此方法
  144. */
  145. public void destory() {
  146. if (AppConfig.DEBUG) {
  147. Log.d(AppConfig.TAG, "MyApplication destory");
  148. }
  149. // 结束百度定位
  150. if (mBdLocationHelper != null) {
  151. mBdLocationHelper.release();
  152. }
  153. // 关闭网络状态的监听
  154. if (mNetWorkObservable != null) {
  155. mNetWorkObservable.release();
  156. }
  157. // 清除图片加载
  158. ImageLoader.getInstance().destroy();
  159. //
  160. releaseFastVolley();
  161. // 释放数据库
  162. // SQLiteHelper.release();
  163. android.os.Process.killProcess(android.os.Process.myPid());
  164. //TODO 获取此刻精确时间并转换为yyyy-MM-dd HH:mm:ss
  165. String nowtime = TimeUtils.f_long_2_str(System.currentTimeMillis());
  166. String saved_time = PreferenceUtils.getString(MyApplication.getInstance(), TimeStatisticsActivity.Killed);
  167. if (!TextUtils.isEmpty(saved_time)){
  168. PreferenceUtils.putString(TimeStatisticsActivity.Killed,saved_time + "," + nowtime);
  169. }else {
  170. PreferenceUtils.putString(TimeStatisticsActivity.Killed,nowtime);
  171. }
  172. }
  173. /*********************
  174. * 百度地图定位服务
  175. ************************/
  176. private BdLocationHelper mBdLocationHelper;
  177. public BdLocationHelper getBdLocationHelper() {
  178. if (mBdLocationHelper == null)
  179. mBdLocationHelper = new BdLocationHelper();
  180. mBdLocationHelper.requestLocation();
  181. return mBdLocationHelper;
  182. }
  183. /*********************
  184. * 提供网络全局监听
  185. ************************/
  186. private NetWorkObservable mNetWorkObservable;
  187. public boolean isNetworkActive() {
  188. if (mNetWorkObservable != null) {
  189. return mNetWorkObservable.isNetworkActive();
  190. }
  191. return true;
  192. }
  193. public void registerNetWorkObserver(NetWorkObservable.NetWorkObserver observer) {
  194. if (mNetWorkObservable != null) {
  195. mNetWorkObservable.registerObserver(observer);
  196. }
  197. }
  198. public void unregisterNetWorkObserver(NetWorkObservable.NetWorkObserver observer) {
  199. if (mNetWorkObservable != null) {
  200. mNetWorkObservable.unregisterObserver(observer);
  201. }
  202. }
  203. /* 文件缓存的目录 */
  204. public String mAppDir;
  205. public String mPicturesDir;
  206. public String mVoicesDir;
  207. public String mVideosDir;
  208. public String mFilesDir;
  209. private void initAppDir() {
  210. File file = getExternalFilesDir(null);
  211. if (file != null) {
  212. if (!file.exists()) {
  213. file.mkdirs();
  214. }
  215. mAppDir = file.getAbsolutePath();
  216. }
  217. file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
  218. if (file != null) {
  219. if (!file.exists()) {
  220. file.mkdirs();
  221. }
  222. mPicturesDir = file.getAbsolutePath();
  223. }
  224. file = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
  225. if (file != null) {
  226. if (!file.exists()) {
  227. file.mkdirs();
  228. }
  229. mVoicesDir = file.getAbsolutePath();
  230. }
  231. file = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
  232. if (file != null) {
  233. if (!file.exists()) {
  234. file.mkdirs();
  235. }
  236. mVideosDir = file.getAbsolutePath();
  237. }
  238. file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
  239. if (file != null) {
  240. if (!file.exists()) {
  241. file.mkdirs();
  242. }
  243. mFilesDir = file.getAbsolutePath();
  244. }
  245. }
  246. /*******************
  247. * 初始化图片加载
  248. **********************/
  249. // 显示的设置
  250. public static DisplayImageOptions mNormalImageOptions;
  251. public static DisplayImageOptions mAvatarRoundImageOptions;
  252. public static DisplayImageOptions mAvatarNormalImageOptions;
  253. private void initImageLoader() {
  254. int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory() / 5);
  255. MemoryCacheAware<String, Bitmap> memoryCache;
  256. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
  257. memoryCache = new LruMemoryCache(memoryCacheSize);
  258. } else {
  259. memoryCache = new LRULimitedMemoryCache(memoryCacheSize);
  260. }
  261. mNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Config.RGB_565).cacheInMemory(true).cacheOnDisc(true)
  262. .resetViewBeforeLoading(false).showImageForEmptyUri(com.xzjmyk.pm.activity.R.drawable.image_download_fail_icon)
  263. .showImageOnFail(com.xzjmyk.pm.activity.R.drawable.image_download_fail_icon).build();
  264. mAvatarRoundImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Config.RGB_565).
  265. cacheInMemory(true).cacheOnDisc(true)
  266. .displayer(new RoundedBitmapDisplayer(10)).
  267. resetViewBeforeLoading(true).
  268. showImageForEmptyUri(com.xzjmyk.pm.activity.R.drawable.avatar_normal)
  269. .showImageOnFail(com.xzjmyk.pm.activity.R.drawable.avatar_normal).showImageOnLoading(com.xzjmyk.pm.activity.R.drawable.avatar_normal).build();
  270. mAvatarNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Config.RGB_565).cacheInMemory(true).cacheOnDisc(true)
  271. .resetViewBeforeLoading(true).showImageForEmptyUri(com.xzjmyk.pm.activity.R.drawable.avatar_normal).showImageOnFail(com.xzjmyk.pm.activity.R.drawable.avatar_normal)
  272. .showImageOnLoading(com.xzjmyk.pm.activity.R.drawable.avatar_normal).build();
  273. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).defaultDisplayImageOptions(mNormalImageOptions)
  274. // .denyCacheImageMultipleSizesInMemory()
  275. .discCache(new TotalSizeLimitedDiscCache(new File(mPicturesDir), 50 * 1024 * 1024))
  276. // 最多缓存50M的图片
  277. .discCacheFileNameGenerator(new Md5FileNameGenerator()).memoryCache(memoryCache).tasksProcessingOrder(QueueProcessingType.LIFO)
  278. .threadPriority(Thread.NORM_PRIORITY - 2)
  279. .threadPoolSize(4)
  280. .build();
  281. // Initialize ImageLoader with configuration.
  282. ImageLoader.getInstance().init(config);
  283. }
  284. /*********************
  285. * 提供全局配置
  286. ************************/
  287. private AppConfig mConfig;
  288. public void setConfig(AppConfig config) {
  289. mConfig = config;
  290. }
  291. public AppConfig getConfig() {
  292. if (mConfig == null) {
  293. mConfig = AppConfig.initConfig(getApplicationContext(), new ConfigBean());
  294. }
  295. return mConfig;
  296. }
  297. /*****************
  298. * 提供全局的Volley
  299. ***************************/
  300. private FastVolley mFastVolley;
  301. public FastVolley getFastVolley() {
  302. if (mFastVolley == null) {
  303. synchronized (MyApplication.class) {
  304. if (mFastVolley == null) {
  305. mFastVolley = new FastVolley(this);
  306. mFastVolley.start();
  307. }
  308. }
  309. }
  310. return mFastVolley;
  311. }
  312. private void releaseFastVolley() {
  313. if (mFastVolley != null) {
  314. mFastVolley.stop();
  315. }
  316. }
  317. @Override
  318. protected void attachBaseContext(Context base) {
  319. super.attachBaseContext(base);
  320. MultiDex.install(this);
  321. }
  322. /***********************
  323. * 保存当前登陆用户的全局信息
  324. ***************/
  325. public String roomName;
  326. public String mAccessToken;
  327. public long mExpiresIn;
  328. public int mUserStatus;
  329. public boolean mUserStatusChecked = false;
  330. public User mLoginUser = new User();// 当前登陆的用户
  331. /***********************
  332. * 保存其他用户坐标信息
  333. ***************/
  334. public String getJSESSION_B2B() {
  335. return JSESSION_B2B;
  336. }
  337. public void setJSESSION_B2B(String jSESSION_B2B) {
  338. JSESSION_B2B = jSESSION_B2B;
  339. }
  340. public static Cookie getCookie() {
  341. return cookie;
  342. }
  343. public static void setCookie(Cookie cookie) {
  344. MyApplication.cookie = cookie;
  345. }
  346. private static Map<String, Object> dataCacheMap;// 数据缓存的集合
  347. /**
  348. * 获取本地缓存
  349. *
  350. * @param key
  351. * @return
  352. */
  353. public static Object getDataCacheFromMap(String key) {
  354. if (dataCacheMap == null) {
  355. return null;
  356. }
  357. return dataCacheMap.get(key);
  358. }
  359. /**
  360. * 移除本地缓存
  361. *
  362. * @param key
  363. */
  364. public static void removeDataCacheFromMap(String key) {
  365. if (dataCacheMap != null) {
  366. dataCacheMap.remove(key);
  367. }
  368. }
  369. /**
  370. * 存储本地缓存
  371. *
  372. * @param key
  373. * @param value
  374. */
  375. public static void putDataCache2Map(String key, Object value) {
  376. if (dataCacheMap == null) {
  377. dataCacheMap = new HashMap<String, Object>();
  378. }
  379. dataCacheMap.put(key, value);
  380. }
  381. }