Wie bekomme ich die Liste der Apps, die von einem Benutzer auf einem Android -Gerät installiert wurden?
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?
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
pkgAppsList.get(i).activityInfo.packageName
holenpackageName
pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString()
zufetch 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.