在写程序时我们经常会需要获取当前手机的一些状态,比如获取网络类型,获取当前手机的运营商等等,下面上代码:
/**
* 获取网络类型
*/
public static String getNetType(Context context) {
String networkTypeName = "";
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
networkTypeName = "WIFI";
} else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){
networkTypeName = "MOBILE";
}
}
return networkTypeName;
}
/**
* 获取运营商
*/
public static String getOperators(Context context) {
String result = "";
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String IMSI = tm.getSubscriberId();
if (IMSI != null) {
if (IMSI.startsWith("46000")) {
result = "中国移动";
} else if (IMSI.startsWith("46001")) {
result = "中国联通";
} else if (IMSI.startsWith("46003")) {
result = "中国电信";
}
}
return result;
}
如果我们某些地方需要做px和dp之间的转换或获取当前手机屏幕的宽高是时,我们可以使用以下方法:
/**
* 根据手机的分辨率从 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);
}
/**
* 获取屏幕高度
* @param mContext
* @return
*/
public static int getWindowHeight(Context mContext) {
return ((Activity) mContext).getWindowManager().getDefaultDisplay()
.getHeight();
}
/**
* 获取屏幕宽度
* @param mContext
* @return
*/
public static int getWindowWidth(Context mContext) {
return ((WindowManager) mContext
.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getWidth();
}
再比如我们有时候需要获取状态栏高度是可以使用:
/**
* 获得状态栏的高度
*/
public static int getStatusHeight(Context context) {
int statusHeight = -1;
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object object = clazz.newInstance();
int height = Integer.parseInt(clazz.getField("status_bar_height")
.get(object).toString());
statusHeight = context.getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
return statusHeight;
}
最后当我们需要判断是否安装了某个app或者某个app是否运行时,我们可以:
/**
* 判断是否装有某个APP
*/
public static boolean isAppInstalled(Context mContext, String packagename) {
PackageInfo packageInfo;
try {
packageInfo = mContext.getPackageManager().getPackageInfo(
packagename, 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if (packageInfo == null) {
// 没安装
return false;
} else {
// 已安装
return true;
}
}
/**
* 判断某个APP是否运行
*/
public static boolean isAppRunningTask(Context mContext, String packagename) {
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
boolean isAppRunning = false;
String MY_PKG_NAME = packagename;
for (ActivityManager.RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals(MY_PKG_NAME) || info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
isAppRunning = true;
Log.i(packagename, info.topActivity.getPackageName() + " info.baseActivity.getPackageName()=" + info.baseActivity.getPackageName());
break;
}
}
return isAppRunning;
}
当上述方法写入工具类在需要使用时调用,非常的实用方便,希望可以帮助到有需要的人。