package com.dazhongcun.merchants.application;
import java.io.File;
import org.acra.ACRA;
import org.acra.ErrorReporter;
import org.acra.ReportField;
import org.acra.ReportingInteractionMode;
import org.acra.annotation.ReportsCrashes;
import android.content.Context;
import android.graphics.Bitmap.CompressFormat;
import android.os.Environment;
import android.text.TextUtils;
import com.dazhongcun.application.BaseApplication;
import com.dazhongcun.meifa.merchants.R;
import com.dazhongcun.utils.BaseUtils;
import com.dazhongcun.utils.PinyinUtils;
import com.loopj.android.http.AsyncHttpClient;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
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.download.BaseImageDownloader;
public class AppApplication extends BaseApplication {
public static final String DB_NAME = "linjuwuye.db";
public static AsyncHttpClient mClient;
public static Context mContext;
public static final String EXIT_APP = "exitActivity:app"; //处理activity结束的broadcast的action
@Override
public void onCreate() {
super.onCreate();
//异常报告
// ACRA.init(this);
// ErrorReporter.getInstance().removeAllReportSenders();
// ErrorReporter.getInstance().setReportSender(new ErrorSend(getApplicationContext()));
//清除图片缓存
// getImageLoader().clearDiscCache();
// getImageLoader().clearMemoryCache();
}
@Override
public void initDB() {
DATABASE_NAME = DB_NAME;
}
@Override
public void initEnv() {
//用pinyin4j来获取对应的应用名
if ("zh".equals(BaseUtils.getDefaultLanguage())) {
mAppName = PinyinUtils.chineneToSpell(getResources().getString(
R.string.app_name0));
} else {
mAppName = PinyinUtils.chineneToSpell(getResources().getString(
R.string.app_name0));
}
// PREFERENCE_NAME是APP的名称
PREFERENCE_NAME = mAppName;
// 判断是否有SD卡再执行创建文件夹的操作
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
//创建应用缓存路径
File dataDir = new File(Environment.getExternalStorageDirectory()
.getPath()
+ File.separator
+ mAppName
+ File.separator
+ "config" + File.separator);
if (dataDir.exists()) {
mSdcardCache = dataDir.getAbsolutePath();
} else {
if (dataDir.mkdirs()) {
mSdcardCache = dataDir.getAbsolutePath();
}
}
//创建APP应用下载路径
mAppDownloads = File.separator + mAppName + File.separator
+ "download";
File f = new File(Environment.getExternalStorageDirectory()
.getPath() + mAppDownloads);
if (!f.exists()) {
f.mkdirs();
}
//图片的缓存路径
File imageCache = new File(dataDir.toString() + File.separator +"imageCache" + File.separator);
if (imageCache.exists()) {
mSdcardImageCache = imageCache.getAbsolutePath();
} else {
if (imageCache.mkdirs()) {
mSdcardImageCache = imageCache.getAbsolutePath();
}
}
//拍照后的图片
File imageCamera = new File(dataDir.toString() + File.separator +"imageCamera" + File.separator);
if (imageCamera.exists()) {
mSdcardImageCamera = imageCamera.getAbsolutePath();
} else {
if (imageCamera.mkdirs()) {
mSdcardImageCamera = imageCamera.getAbsolutePath();
}
}
}
}
@Override
public void initImageLoad() {
mContext = getApplicationContext();
ImageLoaderConfiguration config = null;
if(!TextUtils.isEmpty(mSdcardImageCache)){
config = new ImageLoaderConfiguration
.Builder(mContext)
.memoryCacheExtraOptions(480, 800)// max width, max height,即保存的每个缓存文件的最大长宽
// .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/设置缓存的详细信息,最好不要设置这个
.threadPoolSize(3)//线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY -2)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))// You can pass your own memory cache implementation/你可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(50 * 1024 * 1024)
.discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.discCacheFileCount(100) //缓存的文件数量
.discCache(new UnlimitedDiscCache(new File(mSdcardImageCache))) //自定义缓存路径
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.imageDownloader(new BaseImageDownloader(mContext, 5 * 1000, 30 * 1000))// connectTimeout (5 s), readTimeout (30 s)超时时间
.writeDebugLogs()
.build();
}else{
config = new ImageLoaderConfiguration
.Builder(mContext)
.memoryCacheExtraOptions(480, 800)// max width, max height,即保存的每个缓存文件的最大长宽
// .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/设置缓存的详细信息,最好不要设置这个
.threadPoolSize(3)//线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY -2)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))// You can pass your own memory cache implementation/你可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(50 * 1024 * 1024)
.discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.discCacheFileCount(100) //缓存的文件数量
// .discCache(new UnlimitedDiscCache(new File(mSdcardImageCache))) //自定义缓存路径
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.imageDownloader(new BaseImageDownloader(mContext, 5 * 1000, 30 * 1000))// connectTimeout (5 s), readTimeout (30 s)超时时间
.writeDebugLogs()
.build();
}
ImageLoader.getInstance().init(config);
//默认加载图片方法
/**
* uri 图片地址
* 以下是加载类型
* String imageUri = "http://site.com/image.png"; // from Web
* String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
* String imageUri = "content://media/external/audio/albumart/13"; // from content provider
* String imageUri = "assets://image.png"; // from assets
* String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)
* imageAware ImageView组件
*/
// public void displayImage(String uri, ImageAware imageAware)
}
//获取Imageload的实例
public static ImageLoader getImageLoader(){
if(imageloader == null){
imageloader = ImageLoader.getInstance();
}
return imageloader;
}
// 单例 获取异步数据请求的实例
public static AsyncHttpClient getHttpClient() {
if (mClient == null) {
mClient = new AsyncHttpClient();
}
return mClient;
}
}