package com.example.qingyangdemo.base;
import java.io.File;
import java.util.Properties;
import java.util.UUID;
import com.example.qingyangdemo.R;
import com.example.qingyangdemo.bean.User;
import com.example.qingyangdemo.common.FileUtil;
import com.example.qingyangdemo.common.StringUtil;
import com.example.qingyangdemo.net.Constant;
import com.example.qingyangdemo.net.NetClient;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.webkit.CacheManager;
/**
* 全局应用类:用于保存和调用全局应用配置
*
* @author 赵庆洋
*
*/
public class BaseApplication extends Application {
// wifi状态 联通状态 移动状态
private static int NETTYPE_WIFI = 0x01;
private static int NETTYPE_CMWAP = 0x02;
private static int NETTYPE_CMNET = 0x03;
// 登陆状态
private boolean login = false;
// 登陆的ID
private int loginUnid;
@Override
public void onCreate() {
super.onCreate();
// 注册app异常崩溃处理器
Thread.setDefaultUncaughtExceptionHandler(AppException
.getAppExceptionHandler());
};
/**
* 现在翻转屏是否是横向的
*
* @return
*/
public boolean isLandscape() {
Configuration config = getResources().getConfiguration();
if (config.orientation == Configuration.ORIENTATION_PORTRAIT) {
return false;
} else if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
return true;
}
return false;
}
/**
* 是否是平板登陆
*
* @return
*/
public boolean isTablet() {
return getResources().getBoolean(R.bool.isTablet);
}
/**
* 检测网络是否可用
*
* @return
*/
public boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
return ni != null && ni.isConnectedOrConnecting();
}
/**
* 获取当前网络类型
*
* @return 0:没有网络 1:wifi网络 2:wap网络 3:net网络
*/
public int getNetworkType() {
int netType = 0;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
return netType;
}
int nType = ni.getType();
if (nType == ConnectivityManager.TYPE_MOBILE) {
String extraInfo = ni.getExtraInfo();
if (!StringUtil.isEmpty(extraInfo)) {
// 如果小写等于cmnet
if (extraInfo.toLowerCase().equals("cmnet")) {
netType = NETTYPE_CMNET;
} else {
netType = NETTYPE_CMWAP;
}
}
} else if (nType == ConnectivityManager.TYPE_WIFI) {
netType = NETTYPE_WIFI;
}
return netType;
}
/**
* 判断当前版本是否兼容目标版本的方法
*
* @param versionCode
* @return
*/
public static boolean isMethodsCompat(int versionCode) {
int currentVersion = Build.VERSION.SDK_INT;
return currentVersion >= versionCode;
}
/**
* 获取app安装包信息
*
* @return
*/
public PackageInfo getPackageInfo() {
PackageInfo info = null;
try {
info = getPackageManager().getPackageInfo(getPackageName(), 0);
} catch (NameNotFoundException e) {
e.printStackTrace(System.err);
}
if (info == null)
info = new PackageInfo();
return info;
}
/**
* 是否发出提示音
*
* @return
*/
public boolean isVoice() {
String perf_voice = getProperty(AppConfig.CONF_VOICE);
// 默认是开启提示声音
if (StringUtil.isEmpty(perf_voice))
return true;
else
return StringUtil.toBool(perf_voice);
}
/**
* 设置提示音
*
* @return
*/
public void setConfigVoice(boolean b) {
setProperty(AppConfig.CONF_VOICE, String.valueOf(b));
}
/**
* 设置ip地址
*
* @return
*/
public void setIpAdress(String ipAdress) {
setProperty(AppConfig.CONF_IP_ADDRESS, ipAdress);
}
/**
* 是否检查更新
*
* @return
*/
public boolean isCheckUp() {
String perf_checkup = getProperty(AppConfig.CONF_CHECKUP);
// 默认是关闭的
if (StringUtil.isEmpty(perf_checkup))
return false;
else
return StringUtil.toBool(perf_checkup);
}
/**
* 获取ip地址
*
* @return
*/
public String getIpAdress() {
String ip_adress = getProperty(AppConfig.CONF_IP_ADDRESS);
if (StringUtil.isEmpty(ip_adress))
return "0.0.0.0";
else
return ip_adress;
}
/**
* 设置是否启动检查更新
*
* @param b
*/
public void setConfigCheckUp(boolean b) {
setProperty(AppConfig.CONF_CHECKUP, String.valueOf(b));
}
/**
* 获取App的唯一标识并保存到配置中
*
* @return
*/
public String getAppId() {
String uniqueId = getProperty(AppConfig.CON_APP_UNIQUEID);
if (StringUtil.isEmpty(uniqueId)) {
uniqueId = UUID.randomUUID().toString();
setProperty(AppConfig.CON_APP_UNIQUEID, uniqueId);
}
return uniqueId;
}
/**
* 初始化用户信息
*/
public void initLoginInfo() {
User user = getLoginInfo();
if (user != null && user.getUid() > 0 && user.isRememberMe()) {
this.login = true;
this.loginUnid = user.getUid();
} else {
this.layout();
}
}
/**
* 用户是否登录
*
* @return
*/
public boolean isLogin() {
return login;
}
/**
* 获取登录用户id
*
* @return
*/
public int getLoginUid() {
return this.loginUnid;
}
/**
* 用户注销
*/
public void layout() {
login = false;
loginUnid = 0;
}
/**
* 清除登录信息
*/
public void cleanLoginInfo() {
layout();
removeProperty("user.uid", "user.name", "user.password",
"user.isRememberMe");
}
/**
* 获取登录信息
*
* @return
*/
public User getLoginInfo() {
User user = new User();
user.setUid(StringUtil.toInt(getProperty("user.uid"), 0));
user.setName(getProperty("user.name"));
user.setRememberMe(StringUtil.toBool(getProperty("user.isRememberMe")));
user.setPassword(getProperty("user.password"));
return user;
}
/**
* 保存用户信息
*
* @param user
*/
public void saveLoginInfo(final User user) {
this.loginUnid = user.getUid();
this.login = true;
setProperties(new Properties() {
{
setProperty("user.uid", String.valueOf(user.getUid()));
setProperty("user.name", user.getName());
setProperty("user.password", user.getPassword());
setProperty("user.isRememberMe",
String.valueOf(user.isRememberMe()));
}
});
}
public boolean containsProperty(String key) {
Properties properties = getProperties();
return properties.containsKey(key);
}
/**
* 获取配置集合
*
* @return
*/
public Properties getProperties() {
return AppConfig.getAppConfig(this).get();
}
public void setProperties(Properties properties) {
AppConfig.getAppConfig(this).set(properties);
}
public void setProperty(String key, String value) {
AppConfig.getAppConfig(this).set(key, value);
}
public String getProperty(String key) {
return AppConfig.getAppConfig(this).get(key);
}
public void removeProperty(String... key) {
AppConfig.getAppConfig(this).remove(key);
}
/**
* 清除缓存
*/
public void clearAppCache() {
// 清除webview缓存
File file = CacheManager.getCacheFileBaseDir();
if (file != null && file.exists() && file.isDirectory()) {
for (File item : file.listFiles()) {
item.delete();
}
file.delete();
}
deleteDatabase("webview.db");
deleteDatabase("webview.db-shm");
deleteDatabase("webview.db-wal");
deleteDatabase("webviewCache.db");
deleteDatabase("webviewCache.db-shm");
deleteDatabase("webviewCache.db-wal");
// 清除数据缓存
clearCacheFolder(getFilesDir(), System.currentTimeMillis());
clearCacheFolder(getCacheDir(), System.currentTimeMillis());
// 2.2版本才有将应用缓存转移到sd卡的功能
if (isMethodsCompat(android.os.Build.VERSION_CODES.FROYO)) {
clearCacheFolder(getExternalCacheDir(), System.currentTimeMillis());
}
// 清楚编辑器保存的临时文件
Properties props = getProperties();
for (Object key : props.keySet()) {
String _key = key.toString();
if (_key.startsWith("temp"))
removeProperty(_key);
}
}
/**
* 清除下载缓存
*/
public void clearDownCache() {
// 清除下载缓存
File file = FileUtil.getDirectoryFile(Constant.DOWN_PATH);
if (file != null && file.exists() && file.isDirectory()) {
for (File item : file.listFiles()) {
item.delete();
}
file.delete();
}
}
/**
* 清除缓存目录
*
* @param dir
* 目录
* @param curTime
* 当前系统时间
* @return
*/
private int clearCacheFolder(File dir, long curTime) {
int deletedFiles = 0;
if (dir != null && dir.isDirectory()) {
try {
for (File child : dir.listFiles()) {
if (child.isDirectory()) {
deletedFiles += clearCacheFolder(child, curTime);
}
// 如果文件的最后修改时间小于当前系统时间
if (child.lastModified() < curTime) {
// 删除
if (child.delete()) {
deletedFiles++;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return deletedFiles;
}
/**
* 用户登录验证
*
* @param userName
* @param pwd
* @return
* @throws AppException
*/
public User loginVerify(String userName, String pwd) throws AppException {
return NetClient.login(this, userName, pwd);
}
}