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;
}