2012-10-02 4 views
10

Ich arbeite an einer App, wo ich den Benutzer mit allen installierten Apps präsentieren und ihn/sie wählen lassen und dann etwas damit machen möchte. Ich folgte einem Tutorial (dies: http://impressive-artworx.de/2011/list-all-installed-apps-in-style/), obwohl ich einige Probleme habe. Nachdem ich dem Tutorial gefolgt war, bekam ich nur Apps, die nicht vorinstalliert waren (wie alle Hintergrund-Apps, die nicht gestartet werden können), was großartig ist, wenn Sie die Apps wollen, die der Benutzer aus dem Play Store heruntergeladen hat. Das Problem ist, dass ich in meiner App die startbaren System-Apps wie Youtube und Browser anzeigen möchte, aber nicht die nicht startbaren Apps wie Suchanwendungsanbieter.Nicht herunterfahrbare Apps herausfiltern, wenn alle installierten Apps geladen werden

Hier ist der Code, den ich benutze, wenn die Anwendungen zu erhalten:

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; 
    } 

Nun meine Frage ist; Was ist der beste Weg, die nicht startbaren Apps herauszufiltern?

Jede Hilfe wird geschätzt!

Antwort

25

Der beste Weg ist:

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

Dies ist keine gute Idee, weil einige Anwendungen für getLaunchIntentForPackageName null zurück. Bei dieser Lösung hatte ich das Problem, dass die App "Telefonie" nicht in der App-Liste war. Eine bessere Lösung finden Sie hier: https://stackoverflow.com/a/30446616/4274651 – Janosch

Verwandte Themen