Android 获取应用信息
Android 大约 3159 字工具类
public class AppInfoUtil {
private PackageManager mPackageManager;
private Context mContext;
public static final int FILTER_ALL_APP = 0; // 所有应用程序
public static final int FILTER_SYSTEM_APP = 1; // 系统程序
public static final int FILTER_THIRD_APP = 2; // 第三方应用程序
public static final int FILTER_SDCARD_APP = 3; // 安装在SDCard的应用程序
private volatile static AppInfoUtil singleton = null;
public static AppInfoUtil getInstance(Context context) {
if (singleton == null) {
synchronized (FlowUtil.class) {
if (singleton == null) {
singleton = new AppInfoUtil(context);
}
}
}
return singleton;
}
private AppInfoUtil(Context context) {
mContext = context.getApplicationContext();
mPackageManager = mContext.getPackageManager();
}
@SuppressWarnings("deprecation")
public List<AppInfo> queryAppInfo(int filter) {
List<ApplicationInfo> applicationInfos = mPackageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
Collections.sort(applicationInfos,new ApplicationInfo.DisplayNameComparator(mPackageManager));// 排序
List<AppInfo> appInfos = new ArrayList<>(); // 保存过滤查到的AppInfo
// 根据条件来过滤
switch (filter) {
case FILTER_ALL_APP: // 所有应用程序
appInfos.clear();
for (ApplicationInfo app : applicationInfos) {
appInfos.add(getAppInfo(app));
}
return appInfos;
case FILTER_SYSTEM_APP: // 系统程序
appInfos.clear();
for (ApplicationInfo app : applicationInfos) {
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
appInfos.add(getAppInfo(app));
}
}
return appInfos;
case FILTER_THIRD_APP: // 第三方应用程序
appInfos.clear();
for (ApplicationInfo app : applicationInfos) {
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
appInfos.add(getAppInfo(app));
}
}
break;
case FILTER_SDCARD_APP: // 安装在SDCard的应用程序
appInfos.clear();
for (ApplicationInfo app : applicationInfos) {
if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
appInfos.add(getAppInfo(app));
}
}
return appInfos;
default:
return null;
}
return appInfos;
}
// 构造一个AppInfo对象 ,并赋值
private AppInfo getAppInfo(ApplicationInfo app) {
AppInfo appInfo = new AppInfo();
appInfo.appLabel = (String) app.loadLabel(mPackageManager);
appInfo.appIcon = app.loadIcon(mPackageManager);
appInfo.packageName = (app.packageName);
appInfo.intent = (mPackageManager.getLaunchIntentForPackage(app.packageName));
return appInfo;
}
}
阅读 2783 · 发布于 2019-04-13
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Prometheus+Grafana+redis_exporter 监控 Redis 服务阅读 710
-
Spring 事务失效的几种场景阅读 921
-
Spring AOP 原理阅读 825
-
Android 仿 QQ 消息提示可拖拽控件 DragBadgeView阅读 2404
-
Git OpenSSL errno 10054阅读 832
-
软考-系统架构设计师:存储管理-段页式存储组织阅读 3213
-
Git 提示 error failed to push some refs to git@github.com阅读 2719
-
Linux 统计文本行数阅读 1295
-
package.json 中的依赖包版本号阅读 75
-
使用 awk 提取 JSON 字符串中的字段阅读 7732