package com.xinxin.everyxday.util;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.graphics.Rect;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import java.lang.reflect.Field;
public class DeviceInfoUtil {
/**
* 获取当前网络状态
*
* @return NetworkInfo
*/
public static NetworkInfo getCurrentNetStatus(Context ctx) {
ConnectivityManager manager = (ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE);
return manager.getActiveNetworkInfo();
}
/**
* 获取网络连接状态
*
* @param ctx
* @return true:有网 false:没网
*/
public static boolean isNetworkAvailable(Context ctx) {
NetworkInfo nki = getCurrentNetStatus(ctx);
if (nki != null) {
return nki.isAvailable();
} else
return false;
}
/**
* 获取当前程序版本名
*
* @param context
* @return 返回当前程序版本名
*/
public static String getAppVersionName(Context context) {
String versionName = "";
try {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
versionName = pi.versionName;
if (versionName == null || versionName.length() <= 0) {
return "";
}
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
/**
* 获取客户端版本号
*
* @param c
* @return 版本号
*/
public static int getVersionCode(Context c) {
PackageInfo pi = null;
try {
pi = c.getPackageManager().getPackageInfo(c.getPackageName(),
PackageManager.GET_ACTIVITIES);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return pi.versionCode;
}
/**
* 获取可用存储空间大小 若存在SD卡则返回SD卡剩余空间大小 否则返回手机内存剩余空间大小
*
* @return
*/
public static long getAvailableStorageSpace() {
long externalSpace = getExternalStorageSpace();
if (externalSpace == -1L) {
return getInternalStorageSpace();
}
return externalSpace;
}
/**
* 获取SD卡可用空间
*
* @return availableSDCardSpace 可用空间(MB)。-1L:没有SD卡
*/
public static long getExternalStorageSpace() {
long availableSDCardSpace = -1L;
// 存在SD卡
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
StatFs sf = new StatFs(Environment.getExternalStorageDirectory()
.getPath());
long blockSize = sf.getBlockSize();// 块大小,单位byte
long availCount = sf.getAvailableBlocks();// 可用块数量
availableSDCardSpace = availCount * blockSize / 1024 / 1024;// 可用SD卡空间,单位MB
}
return availableSDCardSpace;
}
/**
* 获取机器内部可用空间
*
* @return availableSDCardSpace 可用空间(MB)。-1L:没有SD卡
*/
public static long getInternalStorageSpace() {
long availableInternalSpace = -1L;
StatFs sf = new StatFs(Environment.getDataDirectory().getPath());
long blockSize = sf.getBlockSize();// 块大小,单位byte
long availCount = sf.getAvailableBlocks();// 可用块数量
availableInternalSpace = availCount * blockSize / 1024 / 1024;// 可用SD卡空间,单位MB
return availableInternalSpace;
}
/**
* 获取SD卡总空间
*
* @return availableSDCardSpace 总空间(MB)。-1L:没有SD卡
*/
public static long getExternalStorageTotalSpace() {
long availableSDCardSpace = -1L;
// 存在SD卡
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
StatFs sf = new StatFs(Environment.getExternalStorageDirectory()
.getPath());
long blockSize = sf.getBlockSize();// 块大小,单位byte
long blockCount = sf.getBlockCount();// 块总数量
availableSDCardSpace = blockCount * blockSize / 1024 / 1024;// 总SD卡空间,单位MB
}
return availableSDCardSpace;
}
/**
* 获取mac 地址
*
* @return
*/
public static String getLocalMacAddress(Context ctx) {
WifiManager wifi = (WifiManager) ctx
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
}
/**
* 获得设备型号
*
* @return
*/
public static String getDeviceModel() {
return Build.MODEL;
}
/**
* 获得国际移动设备身份码
*
* @param context
* @return
*/
public static String getIMEI(Context context) {
return ((TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
}
/**
* 获得国际移动用户识别码
*
* @param context
* @return
*/
public static String getIMSI(Context context) {
return ((TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE)).getSubscriberId();
}
/**
* 获得设备屏幕矩形区域范围
*
* @param activity
* @return
*/
public static Rect getScreenRect(Activity activity) {
// 取出平屏幕的宽和高
DisplayMetrics metric = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metric);
return new Rect(0, 0, metric.widthPixels, metric.heightPixels);
}
/**
* 获得设备屏幕密度
*/
public static float getScreenDensity(Context context) {
DisplayMetrics metrics = context.getApplicationContext().getResources()
.getDisplayMetrics();
return metrics.density;
}
/**
* 获得系统版本
*/
public static String getSDKVersion() {
return android.os.Build.VERSION.SDK;
}
public static int getSDKVersionInt() {
return android.os.Build.VERSION.SDK_INT;
}
public static String getSystemVersion() {
return android.os.Build.VERSION.RELEASE;
}
public static String getTelNumber(Context ctx) {
return ((TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number();
}
private static DisplayMetrics getDisplayMetrics(Context ctx){
Resources re = ctx.getResources();
return re.getDisplayMetrics();
}
public static int getScreenWidth(Context ctx){
return getDisplayMetrics(ctx).widthPixels;
}
public static int getScreenHeight(Context ctx){
return getDisplayMetrics(ctx).heightPixels;
}
public static int getStatusBarHeight(Context ctx){
int statusBarHeight = 38;
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object object = clazz.newInstance();
Field field = clazz.getField("status_bar_height");
int height = Integer.parseInt(field.get(object).toString());
statusBarHeight = ctx.getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
return statusBarHeight;
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}