1 获取已经安装的应用程序
/** * 获取已安装应用信息 * * @param includeSystemApps true:包含系统应用 false:不包含系统应用 */ @SuppressWarnings("static-access") private void getAppInfo(boolean includeSystemApps) { PackageManager pm = this.getPackageManager(); appClassList.clear(); List<PackageInfo> packageInfos = this.getPackageManager().getInstalledPackages(0); List<AppClass> sysApps = new ArrayList<>(); for (PackageInfo packageInfo : packageInfos) { //过滤掉当前app if (packageInfo.packageName.equals("startapp.cuanbo.startoneapp")) { continue; } AppClass appInfo = new AppClass(); // 获得应用名 appInfo.Name = pm.getApplicationLabel(packageInfo.applicationInfo).toString(); // 获得应用包名 appInfo.PageName = packageInfo.packageName; appInfo.Ico = packageInfo.applicationInfo.loadIcon(pm); appInfo.ClassName = packageInfo.getClass().getName(); AppListStr += appInfo.Name + "-" + appInfo.PageName + ":"; //判断是否为非系统预装的应用 (大于0为系统预装应用,小于等于0为非系统应用) if (!includeSystemApps) { if ((packageInfo.applicationInfo.flags & packageInfo.applicationInfo.FLAG_SYSTEM) > 0) { sysApps.add(appInfo); continue; } } appClassList.add(appInfo); } for (AppClass ac : sysApps) { //将系统医用添加进去,我把系统应用显示在最后面 appClassList.add(ac); } }
2 AppClass类
public class AppClass { public String Name =""; public String PageName=""; public String ClassName =""; public String ProcessName=""; public boolean IsActivity = true; public int UID = 0; public Drawable Ico = null; }
3 根据包名,判断应用是否存在
public boolean checkApplication(String packageName) { if (packageName == null || "".equals(packageName)) { return false; } boolean bo = true; try { Intent intent = new Intent(); AppClass ap = getAppByPageName(packageName); intent.setClassName(packageName,ap.ClassName); if (intent.resolveActivity(getPackageManager()) == null){ ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); bo = false; } if (getPackageManager().resolveActivity(intent, 0) == null) { // 说明系统中不存在这个activity bo = false; } List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0); if (list.size() == 0) { bo = false; } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return bo; }
public List<AppClass> appClassList = new ArrayList<>();
public AppClass getAppByPageName(String pageName) { AppClass appClass = new AppClass(); for (int i = 0; i < appClassList.size(); i++) { if (appClassList.get(i).PageName.equals(pageName)) { appClass = appClassList.get(i); break; } } return appClass; }