Frage

Ich verwende im Moment das folgende Code:

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

Aber es gibt Apps zurück, die sowohl vom Gerätehersteller als auch von mir installiert wurden. Wie beschränken Sie es so, dass nur die von mir installierten Apps zurückgegeben werden?

War es hilfreich?

Lösung

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

Flaggen:

Andere Tipps

Zelimirs Antwort ist korrekt. In einigen Fällen werden Sie jedoch nicht alle installierten Anwendungen von Drittanbietern erhalten. ApplicationInfo hat auch Flagge FLAG_UPDATED_SYSTEM_APP das ist gesetzt

Wenn diese Anwendung als Aktualisierung einer integrierten Systemanwendung installiert wurde

Zu meinem Smartphone gehören solche Anwendungen Amazone Kindle, Adobe Reader, Slacker Radio und andere. Diese Anwendungen wurden nicht mit dem Telefon ausgestattet und wurden im Google Play Store installiert. Somit können sie als Apps von Drittanbietern betrachtet werden.

Vielleicht möchten Sie auch überprüfen FLAG_UPDATED_SYSTEM_APP Flagge.

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

Wenn ich pkgAppslist.get (0) mache, gibt es ein ResolvEInfo -Objekt zurück. Wie erhalte ich Informationen wie das Symbol und das Packagename?

Mach das einfach:

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)

Nikolais Antwort ist korrekt, könnte aber mit einem Iterator optimiert werden. Das habe ich mir ausgedacht:

/**
 * 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);

Benutzer

  1. pkgAppsList.get(i).activityInfo.packageName holen packageName
  2. pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString()zu fetch app level name

Die Android PackageManager -Klasse wird verwendet, um Informationen zu den Anwendungspaketen abzurufen, die derzeit auf dem Gerät installiert sind. Sie können eine Instanz der PackageManager -Klasse erhalten, indem Sie GetpackAGememanager () anrufen. PackageManager bietet Methoden zum Abfragen und Manipulieren installierter Pakete und zugehöriger Berechtigungen usw. In diesem Android -Beispiel erhalten wir eine Liste installierter Apps in Android.

PackAGemanager packagemanager = getPackAGememanager (); Listlist = packagemanager.getInstalledApplications (packagemanager.get_meta_data)

packAGemanager.getInstalledApplications () Gibt eine Liste aller Anwendungspakete zurück, die auf dem Gerät installiert sind. Wenn wir das Flag -Get_uninstalled_Packages festgelegt haben, wird eine Liste aller Anwendungen, einschließlich derjenigen, die mit dont_delete_data gelöscht wurden (teilweise installierte Apps mit Datenverzeichnis), zurückgegeben.

Vollständige Infos hier.

Ein weiteres Gut Lies hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top