Starten Sie die Anwendung mit dem Paketnamen

77

Kann mir jemand sagen, wie ich eine neue Anwendung starten soll, wenn ich nur den Paketnamen kenne? Ich habe keine Informationen darüber, welche Aktivität die Hauptaktivität ist.

Bart
quelle

Antworten:

96

Versuchen Sie es mit PackageManagerundgetLaunchIntentForPackage()

CommonsWare
quelle
Sir Warum kann ich den Launcher nicht starten, indem ich seinen Paketnamen mit der Ausnahme java.lang.NullPointer erhalte?
TechArcSri
Startet eine komplett neue Instanz? Ich möchte die vorhandene starten. Wie mache ich das?
JohnyTex
Ich würde die Flags hinzufügen (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED), um sicherzustellen, dass der App-Status der gleiche ist, wenn er bereits geöffnet wurde.
JacksOnF1re
Ich habe ein Problem, als ich versucht habe, Extras an die Ziel-App zu übergeben. Nur wenn der Prozess der Ziel-App nicht existiert, kann sie die Extras erhalten, sonst erhält sie nichts.
Allen Vork
151

Verwenden Sie einfach die folgenden zwei Zeilen, damit Sie jede installierte Anwendung starten können, deren package namebekannt ist:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.abc");
startActivity( launchIntent );

Wenn Sie den Paketnamen der Anwendung, die Sie starten möchten, nicht kennen, probieren Sie es aus

PackageManager pm;
pm = getPackageManager();
//  get a list of installed apps.
packages = pm.getInstalledApplications(0);

Weitere Informationen finden Sie unter diesem Link Verwenden des Paketmanagers

patric_cena
quelle
1
Startet dies eine komplett neue Instanz? Ich möchte die vorhandene starten. Wie mache ich das?
JohnyTex
@ohny tex finden Sie eine Lösung für Ihr Problem
Menna-Allah Sami
@JohnyTex Ich weiß , es ist eine Art spät , aber Sie könnten versuchen , LaunchIntent.setFlags("Intent.FLAG_ACTIVITY_NEW_TASK");undLaunchIntent.setFlags("Intent.FLAG_ACTIVITY_SINGLE_TOP");
KISHORE_ZE
18

Sie können die Startabsicht durch die PackageManagerKlasse erhalten:

PackageManager pm = context.getPackageManager();
Intent launchIntent = pm.getLaunchIntentForPackage("com.example.package");
context.startActivity(launchIntent);

Beachten Sie, dass getLaunchIntentForPackagenull zurückgegeben wird, wenn das Paket nicht gefunden wird. Vielleicht möchten Sie eine Nullprüfung hinzufügen:

if (launchIntent != null) {
    context.startActivity(launchIntent);
} else {
    Toast.makeText(context, "Package not found", Toast.LENGTH_SHORT).show();
}
Anubian Noob
quelle
Diese Antwort unterscheidet sich nur geringfügig von den älteren Antworten, außer dass sie 3 Jahre neuer ist. Ich sehe nicht, wie die Gegenstimmen gerechtfertigt sind.
hBrent
Aber zumindest hat er gepostet, dass die Methode null zurückgibt, wenn kein Paket vorhanden ist. Ich wollte gerade versuchen, eine Ausnahme zu finden, bei der keine Aktivität gefunden wurde. @ HBrent
Xenolion
1
Intent intent;                                        
PackageManager pm = getActivity().getPackageManager();

intent = pm.getLaunchIntentForPackage("com.package.name");                       
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);
Siddhi Mandodi
quelle