2011-11-17 37 views
8

Xin chào Tôi đã làm theo hướng dẫn dưới đây và liệt kê thành công tất cả các ứng dụng đã cài đặt trong ứng dụng của tôi.Tạo danh sách các ứng dụng đã cài đặt

List all installed apps in style

Tuy nhiên nó không liệt kê chúng theo thứ tự abc và tôi không thể tìm ra cách để sắp xếp chúng để họ có. Bất kỳ sự giúp đỡ này sẽ được đánh giá rất nhiều. Tôi đã thử một vài điều như thế này

class IgnoreCaseComparator implements Comparator<String> { 
      public int compare(String strA, String strB) { 
       return strA.compareToIgnoreCase(strB); 
      } 
     } 
     IgnoreCaseComparator icc = new IgnoreCaseComparator(); 
     java.util.Collections.sort(SomeArrayList,icc); 

Nhưng không thể tìm ra cách áp dụng nó vào tiêu đề danh sách ứng dụng. Cảm ơn bạn cho bất kỳ sự giúp đỡ với điều này

=== EDIT ===

Cảm ơn bạn đã trả lời tôi đã làm như sau nhưng có một lỗi trên phân loại. Các lỗi đọc "Phương pháp loại (Danh sách, Comparator) trong bộ sưu tập loại không áp dụng cho các đối số (List, ApplicationInfo.DisplayNameComparator)"

private List<App> loadInstalledApps(boolean includeSysApps) { 
     List<App> apps = new ArrayList<App>(); 

     PackageManager packageManager = getPackageManager(); 

     List<PackageInfo> packs = packageManager.getInstalledPackages(0); 

     for(int i=0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     ApplicationInfo a = p.applicationInfo; 
     if ((!includeSysApps) && ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1)) { 
      continue; 
     } 
     App app = new App(); 
     app.setTitle(p.applicationInfo.loadLabel(packageManager).toString()); 
     app.setPackageName(p.packageName); 
     app.setVersionName(p.versionName); 
     app.setVersionCode(p.versionCode); 
     CharSequence description = p.applicationInfo.loadDescription(packageManager); 
     app.setDescription(description != null ? description.toString() : ""); 
     apps.add(app); 
     } 
     Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(packageManager)); 
     return apps; 
    } 

Trả lời

13

Khi bạn truy vấn Android để có được danh sách các ứng dụng được cài đặt, bạn sẽ nhận được List<ApplicationInfo>. Android cung cấp một ApplicationInfo.DisplayNameComparator cho những:

Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(pm)); 

(nơi pm là một thể hiện của PackageManager).

+1

tôi đã chỉnh sửa ở trên nhưng có lỗi. Trong lớp học của tôi, tôi không có bất cứ điều gì về List chỉ cần liệt kê chúng có giống nhau không? – GFlam

+0

Điều này giải quyết được hai vấn đề tôi gặp phải với trình tải ứng dụng AsyncTask của mình. Cảm ơn. –

+0

@GFlam nếu bạn muốn sắp xếp PackageInfo thay vì ApplicationInfo, vui lòng xem câu trả lời của tôi ở đây: https://stackoverflow.com/a/47198817/997940 –

Các vấn đề liên quan