社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
public void getApps() { List<ApplicationInfo> apps = queryFilterAppInfo(); for (int i = 0; i < apps.size(); i++) { String name = apps.get(i).loadLabel(getPackageManager()).toString(); final String appInfoStr = name+":"+ apps.get(i).packageName; tv_recv.post(new Runnable() { @Override public void run() { tv_recv.append(appInfoStr + "rn"); } }); }
}
private List<ApplicationInfo> queryFilterAppInfo() { PackageManager pm = this.getPackageManager(); // 查询所有已经安装的应用程序 List<ApplicationInfo> appInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的 List<ApplicationInfo> applicationInfos = new ArrayList<>(); // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName List<ResolveInfo> resolveinfoList = getPackageManager() .queryIntentActivities(resolveIntent, 0); Set<String> allowPackages = new HashSet(); for (ResolveInfo resolveInfo : resolveinfoList) { allowPackages.add(resolveInfo.activityInfo.packageName); } for (ApplicationInfo app : appInfos) { // if((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)//通过flag排除系统应用,会将电话、短信也排除掉 // { // applicationInfos.add(app); // } // if(app.uid > 10000){//通过uid排除系统应用,在一些手机上效果不好 // applicationInfos.add(app); // } if (allowPackages.contains(app.packageName)) { applicationInfos.add(app); } } return applicationInfos; }
/* * 启动一个app */ public void startAPP(String appPackageName) { //https://www.2cto.com/kf/201312/269058.html try { Intent intent = this.getPackageManager().getLaunchIntentForPackage(appPackageName); startActivity(intent); } catch (Exception e) { // Toast.makeText(this, "没有安装", Toast.LENGTH_LONG).show(); } }
Android ApplicationInfo 应用程序信息
1、简述
1 2 3 4 5 6 7 8 | 1 ApplicationInfo是android.content.pm包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量public int flags = 0;用于保存应用的标志信息。 2 ApplicationInfo 通过它可以得到一个应用基本信息。 这些信息是从AndroidManifest.xml的< application >标签获取的 3 ApplicationInfo对象里保存的信息都是< application >标签里的属性值 4 ApplicationInfo与ResolveInfo比较:前者能够得到Icon、Label、meta-data、description。后者只能得到Icon、Label |
2、获取ApplicationInfo
2.1 、获取手机上安装所有程序对应的 ApplicationInfo
1 2 3 4 5 6 7 8 | /** * 获取手机上安装的所有的程序对应的 ApplicationInfo * 它是通过解析AndroidManifest.xml的< application >标签中得到的,所以它能得到所有的app * * 获取手机上的所有的安装的应用程序信息 * 参数为 标识 一般为 PackageManager.GET_UNINSTALLED_PACKAGES */ List< ApplicationInfo > list = packageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); |
2.2 、获取指定包名对应的 ApplicationInfo
1 2 3 4 5 6 7 | /** * 获取指定应用程序 ApplicationInfo * 参数一对应应用程序的包名 * 参数二 应用程序对应的标识 通常为 0 */ ApplicationInfo applicationInfo = packageManager.getApplicationInfo("com.androidlongs.contactsapplication", 0); |
3、通过ApplicationInfo来获取应用程序的 基本信息
3.1 、获取应用程序对应的包名、应用名称
1 2 3 4 5 6 7 8 9 | //获取应用图标 Drawable drawable = applicationInfo.loadIcon(packageManager); //获取应用程序的 包名 String appPackageName = applicationInfo.packageName; //获取应用名 //参数 packageManager 是应用管理者对象 String appName =applicationInfo.loadLabel(packageManager).toString(); |
3.2 、获取应用程序对应数据的目录以及占用的空间大小