package com.xzjmyk.pm.activity; import android.app.Application; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.os.Build; import android.os.Environment; import android.os.Handler; import android.os.StrictMode; import android.support.multidex.MultiDex; import android.util.Log; import com.android.volley.RequestQueue; import com.android.volley.toolbox.Volley; import com.baidu.mapapi.SDKInitializer; import com.facebook.stetho.Stetho; import com.lidroid.xutils.DbUtils; import com.lidroid.xutils.HttpUtils; import com.nostra13.universalimageloader.cache.disc.impl.TotalSizeLimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.cache.memory.MemoryCacheAware; import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache; import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.umeng.analytics.MobclickAgent; import com.umeng.socialize.PlatformConfig; import com.uuzuche.lib_zxing.activity.ZXingLibrary; import com.xzjmyk.pm.activity.bean.ConfigBean; import com.xzjmyk.pm.activity.bean.User; import com.xzjmyk.pm.activity.db.SQLiteHelper; import com.xzjmyk.pm.activity.ui.SplashActivity; import com.xzjmyk.pm.activity.util.Constants; import com.xzjmyk.pm.activity.util.PreferenceUtils; import com.xzjmyk.pm.activity.util.SharedUtil; import com.xzjmyk.pm.activity.volley.FastVolley; import org.apache.http.cookie.Cookie; import java.io.File; import java.util.HashMap; import java.util.Map; import cat.ereza.customactivityoncrash.CustomActivityOnCrash; public class MyApplication extends Application { /** * @注释:记录Cookie */ public String JSESSION_B2B; public static Cookie cookie; public static Cookie cookieERP; public static RequestQueue mRequestQueue; public static HttpUtils mHttpUtils; public static DbUtils mDbUtils; private static MyApplication INSTANCE = null; public static MyApplication getInstance() { return INSTANCE; } @Override public void onCreate() { super.onCreate(); //Stetho调试工具初始化 Stetho.initializeWithDefaults(this); //自定义闪退页面初始化 CustomActivityOnCrash.install(this); //设置ErrorActivity在后台启动,默认为true CustomActivityOnCrash.setLaunchErrorActivityWhenInBackground(true); //设置展示详细错误信息,默认为true CustomActivityOnCrash.setShowErrorDetails(true); //启用APP Restart,默认为true CustomActivityOnCrash.setEnableAppRestart(true); //设置重新启动的activity CustomActivityOnCrash.setRestartActivityClass(SplashActivity.class); INSTANCE = this; ZXingLibrary.initDisplayOpinion(this); mRequestQueue = Volley.newRequestQueue(this); mHttpUtils = new HttpUtils(); configHttpUtils(); // initDbUtils(); SharedUtil.init(this); initShareAPI(); // CrashReport.initCrashReport(getApplicationContext(), "900050585", false); PreferenceUtils.putBoolean(this, Constants.IS_NOTIFICATION, false);//不进行通知 new Handler().postDelayed(new Runnable() { @Override public void run() { //定位场景设置 MobclickAgent.setScenarioType(MyApplication.this, MobclickAgent.EScenarioType.E_UM_NORMAL); SDKInitializer.initialize(getApplicationContext()); // 初始化数据库 SQLiteHelper.copyDatabaseFile(getApplicationContext()); // 初始化定位 getBdLocationHelper(); // 初始化App目录 initAppDir(); // 初始化图片加载 initImageLoader(); } }, 1); if (AppConfig.DEBUG) { Log.d(AppConfig.TAG, "MyApplication onCreate"); } if (AppConfig.DEBUG) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build()); } // 初始化网络监听 mNetWorkObservable = new NetWorkObservable(this); } /** * @desc:初始化分享组件 * @author:Arison on 2016/9/29 */ public void initShareAPI(){ PlatformConfig.setWeixin("wx2539cc96bf158e00", "b057aa3e807ba7c505a2f03cc541bbf6"); PlatformConfig.setSinaWeibo("493318722", "7def652c3683603b08bab87d34b1f944"); PlatformConfig.setQQZone("1104894295", "Nk8zMIz5YSqwRQ1F"); } private final String mDbDir = "/sdcard/uu/database";//数据库存放路径 private final String mDbName = "uuhulian.db";//数据库名称 /** * 配置DbUtils */ private void initDbUtils() { DbUtils.DaoConfig daoConfig = new DbUtils.DaoConfig(this); daoConfig.setDbDir(mDbDir); daoConfig.setDbName(mDbName); mDbUtils = DbUtils.create(daoConfig); } /** * 为HttpUtils配置参数 */ private void configHttpUtils() { mHttpUtils.configRequestThreadPoolSize(4); mHttpUtils.configRequestRetryCount(3); mHttpUtils.configResponseTextCharset("utf-8"); mHttpUtils.configTimeout(10000); } /** * 在程序内部关闭时,调用此方法 */ public void destory() { if (AppConfig.DEBUG) { Log.d(AppConfig.TAG, "MyApplication destory"); } // 结束百度定位 if (mBdLocationHelper != null) { mBdLocationHelper.release(); } // 关闭网络状态的监听 if (mNetWorkObservable != null) { mNetWorkObservable.release(); } // 清除图片加载 ImageLoader.getInstance().destroy(); // releaseFastVolley(); // 释放数据库 // SQLiteHelper.release(); android.os.Process.killProcess(android.os.Process.myPid()); } /********************* * 百度地图定位服务 ************************/ private BdLocationHelper mBdLocationHelper; public BdLocationHelper getBdLocationHelper() { if (mBdLocationHelper == null) { mBdLocationHelper = new BdLocationHelper(this); } return mBdLocationHelper; } /********************* * 提供网络全局监听 ************************/ private NetWorkObservable mNetWorkObservable; public boolean isNetworkActive() { if (mNetWorkObservable != null) { return mNetWorkObservable.isNetworkActive(); } return true; } public void registerNetWorkObserver(NetWorkObservable.NetWorkObserver observer) { if (mNetWorkObservable != null) { mNetWorkObservable.registerObserver(observer); } } public void unregisterNetWorkObserver(NetWorkObservable.NetWorkObserver observer) { if (mNetWorkObservable != null) { mNetWorkObservable.unregisterObserver(observer); } } /* 文件缓存的目录 */ public String mAppDir; public String mPicturesDir; public String mVoicesDir; public String mVideosDir; public String mFilesDir; private void initAppDir() { File file = getExternalFilesDir(null); if (file != null) { if (!file.exists()) { file.mkdirs(); } mAppDir = file.getAbsolutePath(); } file = getExternalFilesDir(Environment.DIRECTORY_PICTURES); if (file != null) { if (!file.exists()) { file.mkdirs(); } mPicturesDir = file.getAbsolutePath(); } file = getExternalFilesDir(Environment.DIRECTORY_MUSIC); if (file != null) { if (!file.exists()) { file.mkdirs(); } mVoicesDir = file.getAbsolutePath(); } file = getExternalFilesDir(Environment.DIRECTORY_MOVIES); if (file != null) { if (!file.exists()) { file.mkdirs(); } mVideosDir = file.getAbsolutePath(); } file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); if (file != null) { if (!file.exists()) { file.mkdirs(); } mFilesDir = file.getAbsolutePath(); } } /******************* * 初始化图片加载 **********************/ // 显示的设置 public static DisplayImageOptions mNormalImageOptions; public static DisplayImageOptions mAvatarRoundImageOptions; public static DisplayImageOptions mAvatarNormalImageOptions; private void initImageLoader() { int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory() / 5); MemoryCacheAware memoryCache; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { memoryCache = new LruMemoryCache(memoryCacheSize); } else { memoryCache = new LRULimitedMemoryCache(memoryCacheSize); } mNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Config.RGB_565).cacheInMemory(true).cacheOnDisc(true) .resetViewBeforeLoading(false).showImageForEmptyUri(com.xzjmyk.pm.activity.R.drawable.image_download_fail_icon) .showImageOnFail(com.xzjmyk.pm.activity.R.drawable.image_download_fail_icon).build(); mAvatarRoundImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Config.RGB_565).cacheInMemory(true).cacheOnDisc(true) .displayer(new RoundedBitmapDisplayer(10)).resetViewBeforeLoading(true).showImageForEmptyUri(com.xzjmyk.pm.activity.R.drawable.avatar_normal) .showImageOnFail(com.xzjmyk.pm.activity.R.drawable.avatar_normal).showImageOnLoading(com.xzjmyk.pm.activity.R.drawable.avatar_normal).build(); mAvatarNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Config.RGB_565).cacheInMemory(true).cacheOnDisc(true) .resetViewBeforeLoading(true).showImageForEmptyUri(com.xzjmyk.pm.activity.R.drawable.avatar_normal).showImageOnFail(com.xzjmyk.pm.activity.R.drawable.avatar_normal) .showImageOnLoading(com.xzjmyk.pm.activity.R.drawable.avatar_normal).build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).defaultDisplayImageOptions(mNormalImageOptions) // .denyCacheImageMultipleSizesInMemory() .discCache(new TotalSizeLimitedDiscCache(new File(mPicturesDir), 50 * 1024 * 1024)) // 最多缓存50M的图片 .discCacheFileNameGenerator(new Md5FileNameGenerator()).memoryCache(memoryCache).tasksProcessingOrder(QueueProcessingType.LIFO) .threadPriority(Thread.NORM_PRIORITY - 2) .threadPoolSize(4) .build(); // Initialize ImageLoader with configuration. ImageLoader.getInstance().init(config); } /********************* * 提供全局配置 ************************/ private AppConfig mConfig; public void setConfig(AppConfig config) { mConfig = config; } public AppConfig getConfig() { if (mConfig == null) { mConfig = AppConfig.initConfig(getApplicationContext(), new ConfigBean()); } return mConfig; } /***************** * 提供全局的Volley ***************************/ private FastVolley mFastVolley; public FastVolley getFastVolley() { if (mFastVolley == null) { synchronized (MyApplication.class) { if (mFastVolley == null) { mFastVolley = new FastVolley(this); mFastVolley.start(); } } } return mFastVolley; } private void releaseFastVolley() { if (mFastVolley != null) { mFastVolley.stop(); } } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } /*********************** * 保存当前登陆用户的全局信息 ***************/ public String roomName; public String mAccessToken; public long mExpiresIn; public int mUserStatus; public boolean mUserStatusChecked = false; public User mLoginUser = new User();// 当前登陆的用户 /*********************** * 保存其他用户坐标信息 ***************/ public String getJSESSION_B2B() { return JSESSION_B2B; } public void setJSESSION_B2B(String jSESSION_B2B) { JSESSION_B2B = jSESSION_B2B; } public static Cookie getCookie() { return cookie; } public static void setCookie(Cookie cookie) { MyApplication.cookie = cookie; } private static Map dataCacheMap;// 数据缓存的集合 /** * 获取本地缓存 * @param key * @return */ public static Object getDataCacheFromMap(String key) { if (dataCacheMap == null) { return null; } return dataCacheMap.get(key); } /** * 移除本地缓存 * @param key */ public static void removeDataCacheFromMap(String key) { if (dataCacheMap != null) { dataCacheMap.remove(key); } } /** * 存储本地缓存 * @param key * @param value */ public static void putDataCache2Map(String key, Object value) { if (dataCacheMap == null) { dataCacheMap = new HashMap(); } dataCacheMap.put(key, value); } }