Ich schreibe eine App, mit der Benutzer die Liste der installierten Apps anzeigen können, wählen Sie eine von ihnen und starten Sie es dann nach Plan. Unter Verwendung von Tutorials von stackoverflow habe ich herausgefunden, wie man eine Liste installierter Aktivitäten, deren Paketnamen und Symbole erhält (d. H. here - mehrere Möglichkeiten, dies zu tun). Nur für den Fall, das ist, wie ich Aktivitäten beginnen, es funktioniert einwandfrei, kein Problem hier:Android: So erhalten Sie eine Liste der installierten Aktivitäten, wie sie im Launcher erscheinen, ohne Duplikate
Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
launchIntent.setAction(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);
Das Problem ist, mit einer Liste der installierten Anwendungen abzurufen. Ich habe zwei Wege gefunden, um eine Liste der installierten Anwendungen zu erhalten:
1) verwenden
PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplication(PackageManager.GET_META_DATA)
und von jedem Element aus apps
können Sie bekommen es Paketnamen und Paketaufkleber (App-Namen).
2) verwenden
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
}
Es gibt ein Problem mit ersten Methode: es gibt alle installierten Pakete, einschließlich der Systemdienste, die keine Aktivität enthalten und sind daher nicht startbar. Hier ist ein Screenshot mit einem Beispiel:
Alle oben genannten Elemente, die keine Symbole haben, sind nicht startbar.
Es gibt ein Problem mit dem auch zweiten Ansatz ist: Mehrere Elemente in der Liste Duplikate haben:
Wenn ich einen Haltepunkt in Debugger einrichten ich sehe, dass diese „Maps“ Artikel anders haben Aktivitätsnamen ("com.google.android.maps.MapsActivity", "com.google.android.maps.LatitudeActivity", "com.google.android.maps.PlacesActivity" usw.).
Ich entschied mich, den zweiten Ansatz zu verwenden, weil es eine Liste gibt, die für meine Bedürfnisse besser geeignet ist, aber ich finde keine Möglichkeit, die Duplikate herauszufiltern und nur die Standardaktivität für die App anzuzeigen erscheinen im Launcher (Sie sehen nur einen "Maps" in der App-Liste Ihres Telefons, nicht vier). Ich habe versucht, System-Apps durch ApplicationInfo.FLAG_SYSTEM
herauszufiltern, aber das entfernt viele Apps, die ich haben möchte, einschließlich Karten und anderen vorinstallierten Apps. Ich habe versucht, PackageManager.MATCH_DEFAULT_ONLY
Flag bei der Ausführung von queryIntentActivities, aber das filtert auch viele Anwendungen aus, so dass nur einige wenige.
Ich bin hier irgendwie verloren, und ich weiß nicht, was zu tun ist. Ich habe alle Fragen zu stackoverflow über das Abrufen einer Liste von installierten Apps gelesen, aber dieses Problem wurde noch nie aufgeworfen. Bitte, hilf irgendjemandem? Wie kann ich eine Liste der installierten abschaltbaren Apps abrufen, die keine Duplikate enthalten?
Sie sagen, dass "diese Frage wurde nie gebracht". Bitte überprüfen Sie dies, vielleicht hilft es: http://stackoverflow.com/questions/4598769/list-of-user-installed-apps/4599124#4599124 – Zelimir
Ich meinte Duplikate in der Liste, ich habe niemanden gesehen, der dies erwähnt. Ja, ich habe diesen Kommentar gesehen. Ich habe versucht, Apps mit 'ApplicationInfo.FLAG_SYSTEM' zu überspringen, aber aus irgendeinem Grund werden dadurch viele gültige Apps entfernt, einschließlich Spiele und ähnliches. –