/**
* 获取App信息的工具类
*
*/
public class AppUtil {
/**
* 获取所有应用的信息。注意,这是一个很耗时的操作,一般在子线程中执行!
*
* @param context
* @return
*/
public static List
getAppInfos(Context context) {
PackageManager pm = context.getPackageManager();
List
pkgInfos = pm.getInstalledPackages(0);
List
appInfos = new ArrayList
();
for (PackageInfo pkgInfo : pkgInfos) {
AppInfo appInfo = new AppInfo();
// 应用名
appInfo.setmAppName(pkgInfo.applicationInfo.loadLabel(pm)
.toString());
// 应用图标
appInfo.setmIcon(pkgInfo.applicationInfo.loadIcon(pm));
// 包名
appInfo.setmPkgName(pkgInfo.packageName);
// 版本名
appInfo.setmVersionName(pkgInfo.versionName);
// 版本号
appInfo.setmVersionCode(pkgInfo.versionCode);
File file = new File(pkgInfo.applicationInfo.sourceDir);
// 安装时间
appInfo.setmInstalledTime(file.lastModified());
// 包大小
appInfo.setmPackageSize(file.length());
// 是否是系统应用
appInfo.setSystem(isSystem(pkgInfo));
appInfos.add(appInfo);
}
return appInfos;
}
/**
* 获取所有在桌面产生了图标的应用程序的信息
*
* @param context
* @return
*/
public static List
getLauncherAppInfos(Context context) { List
appInfos = new ArrayList
(); PackageManager pm = context.getPackageManager(); Intent intent=new Intent(); intent.setAction("android.intent.action.MAIN"); intent.setAction("android.intent.category.LAUNCHER"); List
resolveInfos = pm.queryIntentActivities(intent, 0); for(ResolveInfo resolveInfo:resolveInfos){ String pkgName=resolveInfo.activityInfo.applicationInfo.packageName; AppInfo appInfo=getAppInfoByPkgName(context, pkgName); appInfos.add(appInfo); } return appInfos; } /** * 根据包名获取应用信息 * * @param context * @param pkgName * @return */ public static AppInfo getAppInfoByPkgName(Context context, String pkgName) { try { PackageManager pm = context.getPackageManager(); PackageInfo pkgInfo = pm.getPackageInfo(pkgName, 0); AppInfo appInfo = new AppInfo(); // 应用名 appInfo.setmAppName(pkgInfo.applicationInfo.loadLabel(pm) .toString()); // 应用图标 appInfo.setmIcon(pkgInfo.applicationInfo.loadIcon(pm)); // 包名 appInfo.setmPkgName(pkgInfo.packageName); // 版本名 appInfo.setmVersionName(pkgInfo.versionName); // 版本号 appInfo.setmVersionCode(pkgInfo.versionCode); File file = new File(pkgInfo.applicationInfo.sourceDir); // 安装时间 appInfo.setmInstalledTime(file.lastModified()); // 包大小 appInfo.setmPackageSize(file.length()); // 是否是系统应用 appInfo.setSystem(isSystem(pkgInfo)); return appInfo; } catch (NameNotFoundException e) { e.printStackTrace(); } return null; } /** * 判断是否是系统应用 * * @param pkgInfo * @return */ public static boolean isSystem(PackageInfo pkgInfo) { if ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { // 非系统应用 return false; } return true; } /** * 根据包名判断某个应用是否已经安装 * * @param context * @param pkgName * @return */ public static boolean isInstalled(Context context, String pkgName) { try { PackageManager pm = context.getPackageManager(); PackageInfo pkgInfo = pm.getPackageInfo(pkgName, 0); if (pkgInfo != null) { return true; } } catch (NameNotFoundException e) { e.printStackTrace(); } return false; } /** * 获取当前正在运行的且位于栈顶的应用信息 * * @param context * @return */ public static AppInfo getRunningTaskTopAppInfo(Context context) { ActivityManager am = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); RunningTaskInfo runningTaskInfo = am.getRunningTasks(1).get(0); String pkgName = runningTaskInfo.topActivity.getPackageName(); AppInfo appInfo = getAppInfoByPkgName(context, pkgName); return appInfo; } /** * 获取指定数目的当前正在运行的应用信息 * * @param context * @param num * @return */ public static List
getRunningTaskAppInfo(Context context, int num) { List
appInfos = new ArrayList
(); ActivityManager am = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List
runningTaskInfos = am.getRunningTasks(num); if (runningTaskInfos != null) { for (RunningTaskInfo runningTaskInfo : runningTaskInfos) { String pkgName = runningTaskInfo.topActivity.getPackageName(); AppInfo appInfo = getAppInfoByPkgName(context, pkgName); if (appInfo != null) { appInfos.add(appInfo); } } } return appInfos; } }
public class AppInfo {
// 应用名
private String mAppName;
// 应用图标
private Drawable mIcon;
// 安装时间
private long mInstalledTime;
// 包大小
private long mPackageSize;
// 包名
private String mPkgName;
// 是否是系统软件
private boolean isSystem;
// 版本名
private String mVersionName;
// 版本号
private int mVersionCode;
public Drawable getmIcon() {
return mIcon;
}
public void setmIcon(Drawable mIcon) {
this.mIcon = mIcon;
}
public String getmAppName() {
return mAppName;
}
public void setmAppName(String mAppName) {
this.mAppName = mAppName;
}
public long getmInstalledTime() {
return mInstalledTime;
}
public void setmInstalledTime(long mInstalledTime) {
this.mInstalledTime = mInstalledTime;
}
public long getmPackageSize() {
return mPackageSize;
}
public void setmPackageSize(long mPackageSize) {
this.mPackageSize = mPackageSize;
}
public String getmPkgName() {
return mPkgName;
}
public void setmPkgName(String mPkgName) {
this.mPkgName = mPkgName;
}
public boolean isSystem() {
return isSystem;
}
public void setSystem(boolean isSystem) {
this.isSystem = isSystem;
}
public String getmVersionName() {
return mVersionName;
}
public void setmVersionName(String mVersionName) {
this.mVersionName = mVersionName;
}
public int getmVersionCode() {
return mVersionCode;
}
public void setmVersionCode(int mVersionCode) {
this.mVersionCode = mVersionCode;
}
}