[英]how to sort installed apps date wise in android
private List<App> loadInstalledApps(boolean includeSysApps) {
PackageManager appInfo = getPackageManager();
List<ApplicationInfo> listInfo = appInfo.getInstalledApplications(PackageManager.GET_META_DATA);
Collections.sort(listInfo, new ApplicationInfo.DisplayNameComparator(appInfo));
List<App> data = new ArrayList<App>();
for (int index = 0; index < listInfo.size(); index++) {
try {
ApplicationInfo content = listInfo.get(index);
if ((content.flags != ApplicationInfo.FLAG_SYSTEM) && content.enabled) {
if (content.icon != 0) {
App item = new App();
if(!item.isFavourite())
{
item.setTitle(getPackageManager().getApplicationLabel(content).toString());
item.setPackageName(content.packageName);
item.setIcon(getPackageManager().getDrawable(content.packageName, content.icon, content));
long installed = appInfo.getPackageInfo(content.packageName, 0).firstInstallTime;
Date installedDate = new Date(installed);
// create a date time formatter
SimpleDateFormat formatter = new SimpleDateFormat(
"dd/MM/yyyy");
String firstInstallDate = formatter.format(installedDate);
item.setSize(firstInstallDate);
data.add(item);
}
else if(item.isFavourite())
{
item.setTitle(getPackageManager().getApplicationLabel(content).toString());
item.setPackageName(content.packageName);
item.setIcon(getPackageManager().getDrawable(content.packageName, content.icon, content));
data.add(item);
}
}
}
} catch (Exception e) {
}
}
return data;
}
使用下面的比较器而不是DisplayNameComparator
public static class InstallTimeComparator implements Comparator<ApplicationInfo> {
private final PackageManager mPackageManager;
public InstallTimeComparator(PackageManager packageManager) {
mPackageManager = packageManager;
}
@Override
public int compare(ApplicationInfo lhs, ApplicationInfo rhs) {
try {
long lhsInstallTime = mPackageManager.getPackageInfo(lhs.packageName, 0).firstInstallTime;
long rhsInstallTime = mPackageManager.getPackageInfo(rhs.packageName, 0).firstInstallTime;
if (lhsInstallTime < rhsInstallTime) {
return -1;
} else if (rhsInstallTime < lhsInstallTime) {
return 1;
} else {
return 0;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return 0;
}
}
}
用法如下:
Collections.sort(listInfo, new InstallTimeComparator(appInfo));
如果要反转订单,请执行以下操作:
Collections.sort(listInfo, Collections.reverseOrder(new InstallTimeComparator(appInfo)));
我没有检查上面的代码,所以它可能包含一些错误,但你会得到这个想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.