340 votes

Comment obtenir une liste des applications Android installées et choisir un pour exécuter

J'ai posé une question similaire à celle-ci plus tôt cette semaine, mais je ne comprends toujours pas comment obtenir une liste de toutes les applications installées, puis en choisir une à exécuter.

J'ai essayé:

 Intent intent = new Intent(ACTION_MAIN);
intent.addCategory(CATEGORY_LAUNCHER);
 

et ceci montre seulement l'application qui est préinstallée ou peut exécuter le type d'intention ACTION_MAIN.

Je sais aussi que je peux utiliser PackageManager pour obtenir toutes les applications installées, mais comment l'utiliser pour exécuter une application spécifique?

Merci

439voto

Nelson Ramirez Points 3364

Voici une façon plus simple d'utiliser le gestionnaire de paquets

 final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Source dir : " + packageInfo.sourceDir);
    Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 
}
// the getLaunchIntentForPackage returns an intent that you can use with startActivity() 
 

Plus d'infos ici http://qtcstation.com/2011/02/how-to-launch-another-app-from-your-app/

287voto

Karan Points 6418

Voici le code pour obtenir la liste des activités / applications installées sur Android:

 final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0); 

Vous obtiendrez toutes les données nécessaires dans ResolveInfo pour démarrer une application. Vous pouvez consulter javadoc ResolveInfo ici .

HTH!

64voto

Kenneth Evans Points 725

Une autre façon de filtrer sur les applications système (fonctionne avec l'exemple ci-dessus):

 /**
 * Return whether the given PackgeInfo represents a system package or not.
 * User-installed packages (Market or otherwise) should not be denoted as
 * system packages.
 * 
 * @param pkgInfo
 * @return
 */
private boolean isSystemPackage(PackageInfo pkgInfo) {
    return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true
            : false;
}
 

62voto

king9981 Points 238

Lien: http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

Voici un bon exemple:

 class PInfo {
    private String appname = "";
    private String pname = "";
    private String versionName = "";
    private int versionCode = 0;
    private Drawable icon;
    private void prettyPrint() {
        Log.v(appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
    }
}

private ArrayList<PInfo> getPackages() {
    ArrayList<PInfo> apps = getInstalledApps(false); /* false = no system packages */
    final int max = apps.size();
    for (int i=0; i<max; i++) {
        apps.get(i).prettyPrint();
    }
    return apps;
}

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {
    ArrayList<PInfo> res = new ArrayList<PInfo>();        
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
    for(int i=0;i<packs.size();i++) {
        PackageInfo p = packs.get(i);
        if ((!getSysPackages) && (p.versionName == null)) {
            continue ;
        }
        PInfo newInfo = new PInfo();
        newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();
        newInfo.pname = p.packageName;
        newInfo.versionName = p.versionName;
        newInfo.versionCode = p.versionCode;
        newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
        res.add(newInfo);
    }
    return res; 
}
 

38voto

Zaur Points 3277

Obtenir la liste des applications non-système installées

 public static void InstalledApps()
{
    List<PackageInfo> PackList = getPackageManager().getInstalledPackages(0);
    for (int i=0; i < PackList.size(); i++)
    {
        PackageInfo PackInfo = PackList.get(i);
        if (  (PackInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0)
        {
            String AppName = PackInfo.applicationInfo.loadLabel(getPackageManager()).toString();
            Log.e("App № " + Integer.toString(i), AppName);
        }
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X