Android: Comment obtenir une liste de installés activités, tels qu'ils apparaissent dans l'écran applications, sans doublons

Je suis en train d'écrire une application qui permet à l'utilisateur d'afficher la liste des applications installées, sélectionnez-le, puis commencer à les délais. À l'aide de didacticiels de stackoverflow, j'ai réussi à trouver comment obtenir une liste de installés activités, leurs noms de paquets et les icônes(c'est à dire ici - plusieurs façons de le faire). Juste au cas où, c'est comment j'ai commencer ses activités, il fonctionne parfaitement, pas de problème ici:

Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
launchIntent.setAction(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);

Le problème est de récupérer une liste des applications installées. J'ai trouvé deux façons d'obtenir une liste des applications installées:

1) utilisation

PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplication(PackageManager.GET_META_DATA) 

et de chaque élément de apps vous pouvez obtenir le nom de package et l'étiquette de l'emballage(les noms d'application).

2) utiliser

PackageManager pm = getPackageManager();    
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(mainIntent, 0);
for(ResolveInfo info : resolveInfos) {
    ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;
    //...
    //get package name, icon and label from applicationInfo object    
}

Il y a un problème avec première méthode: elle retourne tous les paquets installés, y compris le système de services, qui ne peuvent contenir aucune activité et ne sont donc pas exécutable. Voici une capture d'écran avec un exemple:
Android: Comment obtenir une liste de installés activités, tels qu'ils apparaissent dans l'écran applications, sans doublons

Tous les éléments ci-dessus qui n'ont pas d'icônes ne sont pas projetables.

Il y a un problème avec le deuxième approche ainsi: Plusieurs éléments de la liste ont des doublons:
Android: Comment obtenir une liste de installés activités, tels qu'ils apparaissent dans l'écran applications, sans doublons

Lorsque j'ai mis en place un point d'arrêt dans le débogueur je vois, que ces "Cartes" objets ont différentes activité de les noms ("com.google.android.cartes.MapsActivity", "com.google.android.cartes.LatitudeActivity", "com.google.android.cartes.PlacesActivity" etc.).

J'ai décidé d'utiliser la deuxième méthode, car il donne une liste qui est plus adapté à mes besoins, mais je ne peux pas trouver un moyen de filtrer les doublons et afficher uniquement l'activité par défaut de l'application, tels qu'ils apparaissent dans l'écran de lancement(vous ne voyez qu'une "Cartes" dans votre téléphone de la liste des applications, et non pas quatre). J'ai essayé de filtrage système d'apps par ApplicationInfo.FLAG_SYSTEM, mais cela supprime de nombreuses applications que je veux avoir, y compris les Cartes et d'autres applications préinstallées. J'ai essayé d'utiliser PackageManager.MATCH_DEFAULT_ONLY drapeau lors de l'exécution de queryIntentActivities, mais ce filtre également de nombreuses applications, ne laissant que quelques-uns.

Je suis un peu perdu ici, et je ne sais pas quoi faire. J'ai lu toutes les questions sur stackoverflow propos de la récupération de la liste des applications installées, mais cette question n'a jamais été mise en place. S'il vous plaît, aider quelqu'un? Comment puis-je récupérer une liste de lancer des applications qui n'a pas de doublons?

  • Vous dites que "cette question n'a jamais été mise en place". Veuillez vérifier ceci, peut-être que cela aide: stackoverflow.com/questions/4598769/list-of-user-installed-apps/...
  • Je voulais dire les doublons dans la liste, je n'ai vu personne parler de cette. Oui, j'ai vu ce commentaire, j'ai essayé de sauter des apps avec ApplicationInfo.FLAG_SYSTEM, mais pour une raison quelconque, cela enlève beaucoup de valide les applications, y compris des jeux et autres.