收集一些实用方法 ,最终整理出几个util类,方便以后项目使用,持续更新。
**
* 获得屏幕宽度与高度
*/
public void getScreenSize() {
if (Build.VERSION.SDK_INT > 13) {
Point p = new Point();
((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getSize(p);
screenWidth = p.x;
screenHeight = p.y;
} else {
screenWidth = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
screenHeight = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight();
}
Log.v("ScreenWidth", ""+screenWidth);
Log.v("ScreenHeight", ""+screenHeight);
}
/**
* 获得状态栏高度
*/
public void getStatusHeight() {
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 = getApplicationContext().getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
Log.v("statusHeight", ""+statusHeight);
}
/**
* Save an app icon to cache folder
* @param context Context
* @param appInfo App to save icon
* @return true if the icon has been saved, false otherwise
*/
public static Boolean saveIconToCache(Context context, AppInfo appInfo) {
Boolean res = false;
try {
//apkInfo.getApk(),实体类AppInfo的get方法,获取apk的包名
ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(appInfo.getAPK(), 0);
File fileUri = new File(context.getCacheDir(), appInfo.getAPK());
FileOutputStream out = new FileOutputStream(fileUri);
Drawable icon = context.getPackageManager().getApplicationIcon(applicationInfo);
BitmapDrawable iconBitmap = (BitmapDrawable) icon;
iconBitmap.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out);
res = true;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return res;
}
手机网络相关
/**
* 判断网络是否可用
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
public static boolean checkNetState(Context context) {
boolean netstate = false;
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++)
{
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
netstate = true;
break;
}
}
}
}
return netstate;
}
/**
* 判断网络是否为漫游
*/
public static boolean isNetworkRoaming(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
Log.w(LOG_TAG, "couldn't get connectivity manager");
} else {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null
&& info.getType() == ConnectivityManager.TYPE_MOBILE) {
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
if (tm != null && tm.isNetworkRoaming()) {
Log.d(LOG_TAG, "network is roaming");
return true;
} else {
Log.d(LOG_TAG, "network is not roaming");
}
} else {
Log.d(LOG_TAG, "not using mobile network");
}
}
return false;
}
/**
* 判断MOBILE网络是否可用
*
* @param context
* @return
* @throws Exception
*/
public static boolean isMobileDataEnable(Context context) throws Exception {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isMobileDataEnable = false;
isMobileDataEnable = connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
return isMobileDataEnable;
}
/**
* 判断wifi 是否可用
*
* @param context
* @return
* @throws Exception
*/
public static boolean isWifiDataEnable(Context context) throws Exception {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isWifiDataEnable = false;
isWifiDataEnable = connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
return isWifiDataEnable;
}
获取本机已安装应用列表
/**
* 获取已安装apk的列表
*/
private static List<AppInfo> getAppInfos() {
ArrayList<AppInfo> appInfos = new ArrayList<AppInfo>();
//获取到包的管理者
PackageManager packageManager = mContext.getPackageManager();
//获得所有的安装包
List<PackageInfo> installedPackages = packageManager.getInstalledPackages(0);
//遍历每个安装包,获取对应的信息
for (PackageInfo packageInfo : installedPackages) {
AppInfo appInfo = new AppInfo();
appInfo.setApplicationInfo(packageInfo.applicationInfo);
appInfo.setVersionCode(packageInfo.versionCode);
//得到icon
Drawable drawable = packageInfo.applicationInfo.loadIcon(packageManager);
appInfo.setIcon(drawable);
//得到程序的名字
String apkName = packageInfo.applicationInfo.loadLabel(packageManager).toString();
appInfo.setApkName(apkName);
//得到程序的包名
String packageName = packageInfo.packageName;
appInfo.setApkPackageName(packageName);
//得到程序的资源文件夹
String sourceDir = packageInfo.applicationInfo.sourceDir;
File file = new File(sourceDir);
//得到apk的大小
long size = file.length();
appInfo.setApkSize(size);
System.out.println("---------------------------");
System.out.println("程序的名字:" + apkName);
System.out.println("程序的包名:" + packageName);
System.out.println("程序的大小:" + size);
//获取到安装应用程序的标记
int flags = packageInfo.applicationInfo.flags;
if ((flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
//表示系统app
appInfo.setIsUserApp(false);
} else {
//表示用户app
appInfo.setIsUserApp(true);
}
if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
//表示在sd卡
appInfo.setIsRom(false);
} else {
//表示内存
appInfo.setIsRom(true);
}
appInfos.add(appInfo);
}
return appInfos;
}