这是我检索所有已安装应用程序列表的简单功能,我只需要那些可以启动的应用程序:
public static ArrayList<PhoneAppItem> getInstalledApps()
{
PackageManager pm = MainApp.get().getPackageManager();
List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_META_DATA);
ArrayList<PhoneAppItem> items = new ArrayList<>();
for (int i = 0; i < apps.size(); i++)
{
// nur startbare Apps hinzufügen
if(pm.getLaunchIntentForPackage(apps.get(i).packageName) != null)
{
PhoneAppItem item = new PhoneAppItem(apps.get(i).packageName);
items.add(item);
}
}
Collections.sort(items, new Comparator<PhoneAppItem>() {
@Override
public int compare(PhoneAppItem ai1, PhoneAppItem ai2) {
return ai1.getName().compareToIgnoreCase(ai2.getName());
}
});
return items;
}
这给了我一个好结果,但我错过了一些应用程序。实际上,我可以看到我错过了一个应用程序,我的三星手机上的电话应用程序(虽然我可以看到联系人应用程序)。
为什么呢?它的解决方案是什么?