package com.xiecc.seeWeather.common.utils;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.text.TextUtils;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.ViewConfiguration;
import com.xiecc.seeWeather.R;
import com.xiecc.seeWeather.component.PLog;
import java.io.Closeable;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Util {
/**
* 获取版本号
*
* @return 当前应用的版本号
*/
public static String getVersion(Context context) {
try {
PackageManager manager = context.getPackageManager();
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
return info.versionName;
} catch (Exception e) {
e.printStackTrace();
return context.getString(R.string.can_not_find_version_name);
}
}
/**
* @return 版本号
*/
public static int getVersionCode(Context context) {
try {
PackageManager manager = context.getPackageManager();
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
return info.versionCode;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 只关注是否联网
*/
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
/**
* 判断当前日期是星期几
*
* @param pTime 修要判断的时间
* @return dayForWeek 判断结果
* @Exception 发生异常
*/
public static String dayForWeek(String pTime) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(format.parse(pTime));
int dayForWeek;
String week = "";
dayForWeek = c.get(Calendar.DAY_OF_WEEK);
switch (dayForWeek) {
case 1:
week = "星期日";
break;
case 2:
week = "星期一";
break;
case 3:
week = "星期二";
break;
case 4:
week = "星期三";
break;
case 5:
week = "星期四";
break;
case 6:
week = "星期五";
break;
case 7:
week = "星期六";
break;
}
return week;
}
/**
* 安全的 String 返回
*
* @param prefix 默认字段
* @param obj 拼接字段 (需检查)
*/
public static String safeText(String prefix, String obj) {
if (TextUtils.isEmpty(obj)) return "";
return TextUtils.concat(prefix, obj).toString();
}
public static String safeText(String msg) {
if (null == msg) {
return "";
}
return safeText("", msg);
}
/**
* 天气代码 100 为晴 101-213 500-901 为阴 300-406为雨
*
* @param code 天气代码
* @return 天气情况
*/
public static String getWeatherType(int code) {
if (code == 100) {
return "晴";
}
if ((code >= 101 && code <= 213) || (code >= 500 && code <= 901)) {
return "阴";
}
if (code >= 300 && code <= 406) {
return "雨";
}
return "错误";
}
/**
* 匹配掉错误信息
*/
public static String replaceCity(String city) {
city = safeText(city).replaceAll("(?:省|市|自治区|特别行政区|地区|盟)", "");
return city;
}
/**
* 匹配掉无关信息
*/
public static String replaceInfo(String city) {
city = safeText(city).replace("API没有", "");
return city;
}
/**
* Java 中有一个 Closeable 接口,标识了一个可关闭的对象,它只有一个 close 方法.
*/
public static void closeQuietly(Closeable closeable) {
if (null != closeable) {
try {
closeable.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 获取顶部status bar 高度
*/
public static int getStatusBarHeight(Activity mActivity) {
Resources resources = mActivity.getResources();
int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
int height = resources.getDimensionPixelSize(resourceId);
PLog.i("Status height:" + height);
return height;
}
/**
* 获取底部 navigation bar 高度
*/
public static int getNavigationBarHeight(Activity mActivity) {
Resources resources = mActivity.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
int height = resources.getDimensionPixelSize(resourceId);
PLog.i("Navi height:" + height);
return height;
}
/**
*
* @param context
* @param dipValue
* @return
*/
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
@SuppressLint("NewApi")
public static boolean checkDeviceHasNavigationBar(Context activity) {
//通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar
boolean hasMenuKey = ViewConfiguration.get(activity)
.hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap
.deviceHasKey(KeyEvent.KEYCODE_BACK);
return !hasMenuKey && !hasBackKey;
}
public static void copyToClipboard(String info, Context context) {
ClipboardManager manager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("msg", info);
manager.setPrimaryClip(clipData);
ToastUtil.showShort(String.format("[%s] 已经复制到剪切板啦( •̀ .̫ •́ )✧", info));
}
}