繁体   English   中英

如何在android中对日期安装的应用程序进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM