package com.m.common.utils;
import java.io.File;
import org.apache.http.HttpHost;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.net.ConnectivityManager;
import android.net.DhcpInfo;
import android.net.NetworkInfo;
import android.net.Proxy;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Environment;
import android.os.StatFs;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import com.m.common.context.GlobalContext;
public class SystemUtility {
private static int screenWidth;
private static int screenHeight;
private static float density;
public enum NetWorkType {
none, mobile, wifi
}
private static void setScreenInfo() {
DisplayMetrics dm = new DisplayMetrics();
WindowManager windowManager = (WindowManager) GlobalContext.getInstance().getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
density = dm.density;
}
public static int getScreenWidth() {
if (screenWidth == 0)
setScreenInfo();
return screenWidth;
}
public static int getScreenHeight() {
if (screenHeight == 0)
setScreenInfo();
return screenHeight;
}
public static int getTitleBarHeight(Activity activity) {
int contentTop = activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
//statusBarHeight是上面所求的状态栏的高度
int titleBarHeight = contentTop - getStatusBarHeight(activity);
return titleBarHeight;
}
public static float getDensity() {
if (density == 0.0f)
setScreenInfo();
return density;
}
public static boolean hasSDCard() {
boolean mHasSDcard = false;
if (Environment.MEDIA_MOUNTED.endsWith(Environment.getExternalStorageState())) {
mHasSDcard = true;
} else {
mHasSDcard = false;
}
return mHasSDcard;
}
public static String getSdcardPath() {
if (hasSDCard())
return Environment.getExternalStorageDirectory().getAbsolutePath();
return "/sdcard/";
}
private static boolean sdcardCanWrite() {
return android.os.Environment.getExternalStorageDirectory().canWrite();
}
public static boolean hasSdcardAndCanWrite() {
return hasSDCard() && sdcardCanWrite();
}
/**
* 获取SDCARD的可用大小,单位字节
*
* @return
*/
public long getSdcardtAvailableStore() {
if (hasSdcardAndCanWrite()) {
String path = getSdcardPath();
if (path != null) {
StatFs statFs = new StatFs(path);
long blocSize = statFs.getBlockSize();
long availaBlock = statFs.getAvailableBlocks();
return availaBlock * blocSize;
}
}
return 0;
}
public static NetWorkType getNetworkType() {
ConnectivityManager connMgr = (ConnectivityManager) GlobalContext.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null) {
switch (networkInfo.getType()) {
case ConnectivityManager.TYPE_MOBILE:
return NetWorkType.mobile;
case ConnectivityManager.TYPE_WIFI:
return NetWorkType.wifi;
}
}
return NetWorkType.none;
}
public static HttpHost getProxy() {
String host = Proxy.getDefaultHost();
if (!TextUtils.isEmpty(host)) {
int port = Proxy.getDefaultPort();
HttpHost proxy = new HttpHost(host, port);
return proxy;
}
return null;
}
/**
* mac地址
*
* @param mContext
* @return
*/
public static String getMacAddress() {
WifiManager wifiManager = (WifiManager) GlobalContext.getInstance().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null && wifiInfo.getMacAddress() != null)
return wifiInfo.getMacAddress().replace(":", "");
else
return "0022f420d03f";// 00117f29d23a
}
public static String getUDPIP() {
Context context = GlobalContext.getInstance();
WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcpInfo = wifi.getDhcpInfo();
int IpAddress =dhcpInfo.ipAddress;
int subMask = dhcpInfo.netmask;
return transformIp((~subMask) | IpAddress);
}
private static String transformIp(int i) {
return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
+ "." + (i >> 24 & 0xFF);
}
public static String getIP() {
Context context = GlobalContext.getInstance();
WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
return transformIp(wifi.getConnectionInfo().getIpAddress());
}
public static String getVersionName(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionName;
} catch (Exception e) {
}
return "";
}
public static int getVersionCode(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (Exception e) {
}
return 0;
}
public static String getPackage(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
return packageInfo.packageName;
} catch (Exception e) {
}
return "";
}
public static void scanPhoto(File file) {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
GlobalContext.getInstance().sendBroadcast(intent);
}
public static void hideSoftInput(View paramEditText) {
((InputMethodManager) GlobalContext.getInstance().getSystemService("input_method"))
.hideSoftInputFromWindow(paramEditText.getWindowToken(), 0);
}
public static void showKeyBoard(final View paramEditText) {
paramEditText.requestFocus();
paramEditText.post(new Runnable() {
@Override
public void run() {
((InputMethodManager) GlobalContext.getInstance().getSystemService("input_method")).showSoftInput(paramEditText, 0);
}
});
}
public static int getScreenHeight(Activity paramActivity) {
Display display = paramActivity.getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
return metrics.heightPixels;
}
public static int getStatusBarHeight(Activity paramActivity) {
Rect localRect = new Rect();
paramActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect);
return localRect.top;
}
public static int getActionBarHeight(Activity paramActivity) {
// test on samsung 9300 android 4.1.2, this value is 96px
// but on galaxy nexus android 4.2, this value is 146px
// statusbar height is 50px
// I guess 4.1 Window.ID_ANDROID_CONTENT contain statusbar
int contentViewTop = paramActivity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
// return contentViewTop - getStatusBarHeight(paramActivity);
int[] attrs = new int[] { android.R.attr.actionBarSize };
TypedArray ta = paramActivity.obtainStyledAttributes(attrs);
return ta.getDimensionPixelSize(0, Utils.dip2px(48));
}
// below status bar,include actionbar, above softkeyboard
public static int getAppHeight(Activity paramActivity) {
Rect localRect = new Rect();
paramActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect);
return localRect.height();
}
// below actionbar, above softkeyboard
public static int getAppContentHeight(Activity paramActivity) {
return SystemUtility.getScreenHeight(paramActivity) - SystemUtility.getStatusBarHeight(paramActivity)
- SystemUtility.getActionBarHeight(paramActivity) - SystemUtility.getKeyboardHeight(paramActivity);
}
public static int getKeyboardHeight(Activity paramActivity) {
int height = SystemUtility.getScreenHeight(paramActivity) - SystemUtility.getStatusBarHeight(paramActivity)
- SystemUtility.getAppHeight(paramActivity);
if (height == 0) {
height = ActivityHelper.getInstance().getIntShareData("KeyboardHeight", 400);
}
else {
ActivityHelper.getInstance().putIntShareData("KeyboardHeight", height);
}
return height;
}
public static boolean isKeyBoardShow(Activity paramActivity) {
int height = SystemUtility.getScreenHeight(paramActivity) - SystemUtility.getStatusBarHeight(paramActivity)
- SystemUtility.getAppHeight(paramActivity);
return height != 0;
}
}