574 Stimmen

So starten Sie eine Aktivität aus einer anderen Anwendung in Android

Ich möchte ein installiertes Paket aus meiner Android-Anwendung heraus starten. Ich gehe davon aus, dass dies mit Intents möglich ist, aber ich habe keine Möglichkeit gefunden, dies zu tun. Gibt es einen Link, wo man die Informationen finden kann?

2 Stimmen

Was passiert, wenn ich die zweite App von der ersten aus öffne und dann direkt auf das Symbol der zweiten App klicke, erhalte ich zwei Instanzen der App, was nicht erwünscht ist. Wie kann ich damit umgehen?

0 Stimmen

4voto

Chethana Arunodh Punkte 264

Dies wird alle Szenarien abdecken

1. die Absicht für das Paket zu erhalten

2. wenn die Absicht null ist, wird der Benutzer zum Playstore umgeleitet

3. wenn es ein Problem mit dem offenen Playstore gibt, dann öffnet er sich im Standardbrowser.

var intent = activity!!.packageManager.getLaunchIntentForPackage("com.google.android.youtube")

          if (intent == null) {
            if (intent == null) {
                    intent = try {
                        Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.google.android.youtube"))
                    } catch (e: Exception) {
                        Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.google.android.youtube"))
                    }
                }
             startActivity(intent)

Für Android 11 (API Level 30) oder höher, in AndroidManifest.xml,

<queries>
    <package android:name="com.google.android.youtube" />
    <package android:name="com.example.app" />
</queries>

Oder wir können einfach alle Pakete zulassen (nicht empfohlen)

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" />

Referenzen

Filterung der Paketsichtbarkeit unter Android

Deklaration der Sichtbarkeitsanforderungen für Pakete

2voto

Sharath kumar Punkte 3964

Die Schritte zur Aufnahme einer neuen Tätigkeit sind wie folgt:

1. die Absicht für das Paket zu erhalten

2. wenn die Absicht null ist, wird der Benutzer zum Playstore umgeleitet

3. wenn Absicht nicht Null ist, Aktivität öffnen

public void launchNewActivity(Context context, String packageName) {
    Intent intent = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.CUPCAKE) {
        intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
    }
    if (intent == null) {
        try {
            intent = new Intent(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("market://details?id=" + packageName));
            context.startActivity(intent);
        } catch (android.content.ActivityNotFoundException anfe) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
        }
    } else {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
}

2voto

WarrenFaith Punkte 56919

Wenn Sie die Daten und die Aktion kennen, auf die das installierte Paket reagiert, sollten Sie diese Informationen einfach zu Ihrer Intent-Instanz hinzufügen, bevor Sie sie starten.

Wenn Sie Zugriff auf das AndroidManifest der anderen App haben, können Sie dort alle benötigten Informationen einsehen.

1 Stimmen

Vielen Dank für die Antwort. Ja, ich habe das AndroidManifest der anderen Anwendung. Was ich jetzt versuche, ist der folgende Code: Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("com.package",".MainActivity")); startActivity(intent); aber auf diese Weise funktioniert es nicht. Können Sie mir einen genaueren Link geben, wie man das macht?

1 Stimmen

Die Anwendung stürzt bei der Zeile "startActivity..." ab: Die Anwendung wurde unerwartet angehalten. Bitte versuchen Sie es erneut. Wo kann ich den Fehler in LogCat sehen?

5 Stimmen

Ich habe den Fehler gefunden: Beim Setzen der Komponente muss der voll qualifizierte Klassenname statt nur der Klasse genannt werden: intent.setComponent(new ComponentName("com.package", "com.package.MainActivity")) statt intent.setComponent(new ComponentName("com.package",".MainActivity"))

2voto

Mirza Ahmed Baig Punkte 4935
private fun openOtherApp() {
        val sendIntent = packageManager.getLaunchIntentForPackage("org.mab.dhyanaqrscanner")
        startActivity(sendIntent)
        finishAffinity()
    }

2voto

Techie Vineet Punkte 71

Übergeben Sie den Paketnamen und die Meldung, die angezeigt werden soll, wenn das Paket nicht installiert ist ;-)

void openApp(String appPackageName,String message){
    Intent launchIntent = getPackageManager().getLaunchIntentForPackage(appPackageName);
    if (launchIntent != null) {
        startActivity(launchIntent);
    } else {
        Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X