获取程序信息

// 获得所有启动Activity的信息,类似于Launch界面
public void queryAppInfo() {
PackageManager pm = this.getPackageManager(); // 获得PackageManager对象
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// 通过查询,获得所有ResolveInfo对象.
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent, 0);
// 调用系统排序 , 根据name排序
// 该排序很重要,否则只能显示系统应用,而不能列出第三方应用程序
Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator(pm));
if (mlistAppInfo != null) {
mlistAppInfo.clear();
for (ResolveInfo reInfo : resolveInfos) {
String activityName = reInfo.activityInfo.name; // 获得该应用程序的启动Activity的name
String pkgName = reInfo.activityInfo.packageName; // 获得应用程序的包名
String appLabel = (String) reInfo.loadLabel(pm); // 获得应用程序的Label
Drawable icon = reInfo.loadIcon(pm); // 获得应用程序图标
// 为应用程序的启动Activity 准备Intent
Intent launchIntent = new Intent();
launchIntent.setComponent(new ComponentName(pkgName, activityName));
// 创建一个AppInfo对象,并赋值
AppInfo appInfo = new AppInfo();
appInfo.setAppLabel(appLabel);
appInfo.setPkgName(pkgName);
appInfo.setAppIcon(icon);
appInfo.setIntent(launchIntent);
mlistAppInfo.add(appInfo); // 添加至列表中
}
}
}



// 根据查询条件,查询特定的ApplicationInfo

private List<AppInfo> queryFilterAppInfo(int filter) {
pm = this.getPackageManager();
// 查询所有已经安装的应用程序
List<ApplicationInfo> listAppcations = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
Collections.sort(listAppcations, new ApplicationInfo.DisplayNameComparator(pm));// 排序
List<AppInfo> appInfos = new ArrayList<AppInfo>(); // 保存过滤查到的AppInfo


// 根据条件来过滤
switch (filter) {
case FILTER_ALL_APP: // 所有应用程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
appInfos.add(getAppInfo(app));
}
return appInfos;
case FILTER_SYSTEM_APP: // 系统程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
appInfos.add(getAppInfo(app));
}
}
return appInfos;
case FILTER_THIRD_APP: // 第三方应用程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
appInfos.add(getAppInfo(app));
}
}
break;
case FILTER_SDCARD_APP: // 安装在SDCard的应用程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
appInfos.add(getAppInfo(app));
}
}
return appInfos;
}
return appInfos;
}
发布了17 篇原创文章 · 获赞 106 · 访问量 48万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览