[英]How to get class names of an installed application using packageManager
[英]How to get installed packages using PackageManager?
我想獲取已安裝應用程序的列表,但只有具有圖標且可啟動的應用程序 。 我正在制作一個啟動器應用程序,並使用它:
private List<AppList> getInstalledApps() {
List<AppList> res = new ArrayList<AppList>();
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
for (int i = 0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
if ((isSystemPackage(p) == false)) {
String appName = p.applicationInfo.loadLabel(getPackageManager()).toString();
Drawable icon = p.applicationInfo.loadIcon(getPackageManager());
String package_name = p.applicationInfo.packageName;
res.add(new AppList(appName, package_name, icon));
}
}
private boolean isSystemPackage(PackageInfo pkgInfo) {
return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false;
}
問題是,要過濾掉無法啟動的應用程序,我必須過濾掉系統應用程序,這不是最好的解決方案,因為它還會過濾掉以下應用程序:相機,日歷,計算器等。
您可以通過以下方式檢查應用是否可啟動
packageManager.getLaunchIntentForPackage(packageName) != null
對於圖標,您可以檢查是否
info.loadIcon(packageManager) != null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.