2012-10-02 36 views
10

Kullanıcıyı yüklü tüm uygulamalarla sunmak istediğim bir uygulama üzerinde çalışıyorum ve ona bir tane seçip onunla bir şeyler yapmasına izin verin. Bazı sorunlarım olmasına rağmen bir eğitici (bu: http://impressive-artworx.de/2011/list-all-installed-apps-in-style/) takip ettim. Eğiticiyi uyguladıktan sonra, yalnızca önceden yüklenmiş olmayan (alışılamayan tüm arka plan uygulamaları gibi) uygulamaları kullanıyorum. Bu, kullanıcının oyun deposundan indirdiği uygulamaları istiyorsanız harika. Sorun benim uygulamamda, Youtube ve Tarayıcı gibi başlatılabilir sistem uygulamalarını göstermek, ancak Arama Uygulaması Sağlayıcısı gibi başlatılamayanları görmek istemem. İşte Yüklü tüm uygulamaları alırken başlatılamayan uygulamaları filtreleyin

uygulama almak zaman kullanıyorum kodu:

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

    // the package manager contains the information about all installed apps 
    PackageManager packageManager = getPackageManager(); 

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

    for(int i=0; i < packs.size(); i++) { 
    PackageInfo p = packs.get(i); 
    ApplicationInfo a = p.applicationInfo; 

    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); 
    } 
    return apps; 
    } 

Şimdi sorum şu; Başlatılamayan uygulamaları filtrelemenin en iyi yolu nedir?

Herhangi bir yardım için teşekkür ederiz!

cevap

25

En yoludur:

public static List<ApplicationInfo> getAllInstalledApplications(Context context) { 
    List<ApplicationInfo> installedApps = context.getPackageManager().getInstalledApplications(PackageManager.PERMISSION_GRANTED); 
    List<ApplicationInfo> launchableInstalledApps = new ArrayList<ApplicationInfo>(); 
    for(int i =0; i<installedApps.size(); i++){ 
     if(context.getPackageManager().getLaunchIntentForPackage(installedApps.get(i).packageName) != null){ 
      //If you're here, then this is a launch-able app 
      launchableInstalledApps.add(installedApps.get(i)); 
     } 
    } 
    return launchableInstalledApps; 
} 
+0

bazı uygulamalar getLaunchIntentForPackageName için boş dönmek çünkü bu, iyi bir fikir değildir. Bu çözümle, "Telefon" uygulamasının uygulamalar listesinde olmaması sorununu yaşadım. Daha iyi bir çözüm için buraya bakın: https://stackoverflow.com/a/30446616/4274651 – Janosch