Question

J'utilise la pièce de code suivante au moment:

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

mais il retourne applications qui ont été installés par le fabricant de l'appareil tant et moi. Comment limiter de sorte que seules les applications que j'ai installé sont retournés?

Était-ce utile?

La solution

// Flags: See below
int flags = PackageManager.GET_META_DATA | 
            PackageManager.GET_SHARED_LIBRARY_FILES |     
            PackageManager.GET_UNINSTALLED_PACKAGES;

PackageManager pm = getPackageManager();
List<ApplicationInfo> applications = pm.getInstalledApplications(flags);
for (ApplicationInfo appInfo : applications) {
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
        // System application
    } else {
        // Installed by user
    }
}

Drapeaux:

Autres conseils

La réponse de Zelimir est correcte. Mais dans certains cas, il ne vous donnera pas toutes les applications tierces installées. ApplicationInfo a aussi FLAG_UPDATED_SYSTEM_APP drapeau qui est fixé

  

Si cette application a été mise à jour d'installation comme un système intégré   l'application

Sur mon téléphone intelligent telles applications incluent Kindle Amazone, Adobe Reader, Slacker Radio et d'autres. Ces applications ne sont pas venus avec le téléphone et ont été installés à partir de Google Play Store. Ainsi, ils peuvent être considérés comme des applications tierces.

Ainsi, vous pouvez également consulter le drapeau de FLAG_UPDATED_SYSTEM_APP.

final PackageManager packageManager = _context.getPackageManager();
List<ApplicationInfo> installedApplications = 
    packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo appInfo : installedApplications)
{
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
    {
        // IS A SYSTEM APP
    }

    if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)
    {
        // APP WAS INSTALL AS AN UPDATE TO A BUILD-IN SYSTEM APP
    }
}
  

Si je fais pkgAppsList.get (0), elle retourne un objet ResolveInfo. Comment puis-je obtenir des informations telles que l'icône et packageName?

Il suffit de faire ceci:

ResolveInfo info = pkgAppsList.get(0);
ApplicationInfo appInfo = info.activityInfo.applicationInfo;

PackageManager packageManager = = getPackageManager();
//And then you retrieve all needed data:
Drawable packageIcon = packageManager.getApplicationIcon(applicationInfo); //Icon
String packageName = applicationInfo.packageName; //Package name
String packageLabel = String.valueOf(packageManager.getApplicationLabel(applicationInfo)) //Package label(app name)

La réponse de Nikolai est correct, mais il pourrait être optimisé en utilisant un itérateur. C'est ce que je suis venu avec:

/**
 * Return list of installed user applications
 */
static List<ApplicationInfo> getUserInstalledApplications(Context context) {
    // Get installed applications
    final PackageManager packageManager = context.getPackageManager();
    List<ApplicationInfo> installedApplications =
            packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

    // Remove system apps
    Iterator<ApplicationInfo> it = installedApplications.iterator();
    while (it.hasNext()) {
        ApplicationInfo appInfo = it.next();
        if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            it.remove();
        }
    }

    // Return installed applications
    return installedApplications;
}
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);

utilisateur

  1. pkgAppsList.get(i).activityInfo.packageName à récupérer packageName
  2. pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString() à fetch app level name

class Android PackageManager est utilisé pour récupérer des informations sur les packages d'application qui sont actuellement installés sur l'appareil. Vous pouvez obtenir une instance de la classe PackageManager en appelant getPackageManager (). PackageManager fournit des méthodes d'interrogation et la manipulation de paquets installés et les autorisations connexes, etc. Dans cet exemple Android, nous nous obtenons la liste des applications installées dans Android.

PackageManager PackageManager = getPackageManager (); Liste list = packageManager.getInstalledApplications (PackageManager.GET_META_DATA)

packageManager.getInstalledApplications () retourne une liste de tous les paquets d'application qui sont installés sur l'appareil. Si l'on fait le drapeau GET_UNINSTALLED_PACKAGES a été défini, une liste de toutes les applications, y compris celles supprimées avec DONT_DELETE_DATA (applications partiellement installées Les RÉPERTOIRE de données) seront retournés.

Infos complètes ici.

Une autre bonne lire ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top