698 Stimmen

Wie öffne ich den Google Play Store direkt aus meiner Android-Anwendung?

Ich habe den Google Play Store mit folgendem Code geöffnet

Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=my packagename "));
startActivity(i);.

Aber es zeigt mir eine Vollständige Aktionsansicht an, um die Option (Browser/Play Store) auszuwählen. Ich möchte die Anwendung direkt im Play Store öffnen.

0 Stimmen

1692voto

Cat Punkte 66419

Sie können dies mit dem market:// Präfix.

Java

final String appPackageName = getPackageName(); // getPackageName() aus dem Context oder Activity-Objekt
try {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (android.content.ActivityNotFoundException anfe) {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}

Kotlin

try {
    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$packageName")))
} catch (e: ActivityNotFoundException) {
    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$packageName")))
}

Hier verwenden wir einen try/catch-Block, weil eine Exception ausgelöst wird, wenn der Play Store nicht auf dem Zielgerät installiert ist.

HINWEIS: Jede App kann sich als fähig registrieren, den market://details?id= URI zu verarbeiten. Wenn Sie speziell Google Play anvisieren möchten, ist die Lösung in Berták's Antwort eine gute Alternative.

0 Stimmen

Ich habe bereits mit diesem Code versucht, dies zeigt auch die Option zur Auswahl des Browsers/Play Store an, da mein Gerät beide Apps installiert hat (Google Play Store/Browser).

0 Stimmen

Nicht sicher, was ich dir sagen soll. Ich verwende diesen Code sowohl auf 2.3.3 als auch auf 4.1 und beide öffnen den Play Store. Darüber hinaus sagen die Dokumente market:// "Startet die Play Store App".

63 Stimmen

Wenn Sie zu allen Apps des Entwicklers weitergeleitet werden möchten, verwenden Sie market://search?q=pub:"+devName und http://play.google.com/store/search?q=pub:"+devName

189voto

Berťák Punkte 7067

Viele Antworten hier schlagen vor, Uri.parse("market://details?id=" + appPackageName)) zu verwenden, um den Google Play Store zu öffnen, aber ich glaube, dass es tatsächlich unzureichend ist:

Einige Drittanbieteranwendungen können eigene Intent-Filter mit dem Schema "market://" verwenden, sodass sie die bereitgestellte Uri anstelle von Google Play verarbeiten können (ich habe diese Situation z.B. mit der SnapPea-Anwendung erlebt). Die Frage lautet "Wie öffne ich den Google Play Store?", daher gehe ich davon aus, dass Sie keine andere Anwendung öffnen möchten. Bitte beachten Sie auch, dass z.B. die App-Bewertung nur relevant ist in der GP Store-App usw.

Um den Google Play Store UND NUR den Google Play Store zu öffnen, verwende ich diese Methode:

public static void openAppRating(Context context) {
    // Sie können auch BuildConfig.APPLICATION_ID verwenden
    String appId = context.getPackageName();
    Intent rateIntent = new Intent(Intent.ACTION_VIEW,
        Uri.parse("market://details?id=" + appId));
    boolean marketFound = false;

    // finde alle Anwendungen, die unseren rateIntent verarbeiten können
    final List otherApps = context.getPackageManager()
        .queryIntentActivities(rateIntent, 0);
    for (ResolveInfo otherApp: otherApps) {
        // Suche nach der Google Play-Anwendung
        if (otherApp.activityInfo.applicationInfo.packageName
                .equals("com.android.vending")) {

            ActivityInfo otherAppActivity = otherApp.activityInfo;
            ComponentName componentName = new ComponentName(
                    otherAppActivity.applicationInfo.packageName,
                    otherAppActivity.name
                    );
            // Stellen Sie sicher, dass sie NICHT im Stapel Ihrer Aktivität geöffnet wird
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            // Task-Reparenting bei Bedarf
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            // Wenn der Google Play bereits in einem Suchergebnis geöffnet war
            // Stellen Sie sicher, dass er immer noch zur angeforderten App-Seite geht
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            // Stellen Sie sicher, dass nur die Google Play-App berechtigt ist,
            // den Intent abzufangen
            rateIntent.setComponent(componentName);
            context.startActivity(rateIntent);
            marketFound = true;
            break;

        }
    }

    // falls GP auf dem Gerät nicht vorhanden ist, Browser öffnen
    if (!marketFound) {
        Intent webIntent = new Intent(Intent.ACTION_VIEW,
            Uri.parse("https://play.google.com/store/apps/details?id="+appId));
        context.startActivity(webIntent);
    }
}

Der Punkt ist, dass wenn neben Google Play weitere Anwendungen unseren Intent öffnen können, der App-Auswahldialog übersprungen wird und die GP-App direkt gestartet wird.

UPDATE: Manchmal scheint es, dass sie nur die GP-App öffnet, ohne das Profil der App zu öffnen. Wie TrevorWiley in seinem Kommentar vorgeschlagen hat, könnte Intent.FLAG_ACTIVITY_CLEAR_TOP das Problem beheben. (Ich habe es selbst noch nicht getestet...)

Sehen Sie sich diese Antwort an, um zu verstehen, was Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED tut.

5 Stimmen

Während dies gut ist, scheint es auch mit der aktuellen Google Play-Version unzuverlässig zu sein. Wenn Sie eine andere App-Seite im Google Play öffnen und dann diesen Code ausführen, wird nur der Google Play geöffnet, aber nicht zu Ihrer App weitergeleitet.

3 Stimmen

@zoltish, ich habe Intent.FLAG_ACTIVITY_CLEAR_TOP zu den Flags hinzugefügt und das scheint das Problem zu beheben.

0 Stimmen

Ich habe Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED verwendet, aber es funktioniert nicht. Es wird keine neue Instanz des Play Stores geöffnet.

103voto

Najib.Nj Punkte 3593

Gehen Sie auf den offiziellen Link des Android-Entwicklers, um das Tutorial Schritt für Schritt zu sehen und den Code für Ihr Anwendungs-Paket aus dem Play Store zu erhalten, wenn es existiert oder wenn Play Store-Apps nicht existieren, öffnen Sie die Anwendung über den Webbrowser.

Offizieller Link des Android-Entwicklers

https://developer.android.com/distribute/tools/promote/linking.html

Verlinkung zu einer Anwendungsseite

Von einer Webseite aus: https://play.google.com/store/apps/details?id=

Von einer Android-App aus: market://details?id=

Verlinkung zu einer Produktliste

Von einer Webseite aus: https://play.google.com/store/search?q=pub:

Von einer Android-App aus: market://search?q=pub:

Verlinkung zu einem Suchergebnis

Von einer Webseite aus: https://play.google.com/store/search?q=&c=apps

Von einer Android-App aus: market://search?q=&c=apps

0 Stimmen

Die Verwendung des Präfixes market:// wird nicht mehr empfohlen (überprüfen Sie den Link, den Sie gepostet haben)

0 Stimmen

@GregEnnis wo siehst du, dass das market://-Präfix nicht mehr empfohlen wird?

2 Stimmen

@loki Ich denke, der Punkt ist, dass es nicht mehr als Vorschlag aufgeführt ist. Wenn Sie auf dieser Seite nach dem Wort market suchen, finden Sie keine Lösung. Ich denke, der neue Weg besteht darin, einen allgemeineren Intent auszulösen developer.android.com/distribute/marketing-tools/… . Neuere Versionen der Play Store-App haben wahrscheinlich einen Intent-Filter für diese URI https://play.google.com/store/apps/details?id=com.example.an‌​droid

35voto

M3-n50 Punkte 783

Während die Antwort von Eric korrekt ist und der Code von Berták auch funktioniert. Ich denke, dass dies beide eleganter kombiniert.

try {
    Intent appStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName));
    appStoreIntent.setPackage("com.android.vending");

    startActivity(appStoreIntent);
} catch (android.content.ActivityNotFoundException exception) {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}

Durch die Verwendung von setPackage zwingen Sie das Gerät, den Play Store zu verwenden. Wenn kein Play Store installiert ist, wird die Exception abgefangen.

1 Stimmen

Die offiziellen Dokumente verwenden https://play.google.com/store/apps/details?id= statt market:. Warum? developer.android.com/distribute/marketing-tools/… Immer noch eine umfassende und kurze Antwort.

0 Stimmen

Ich habe Bertáks Code ausprobiert und es funktioniert, aber dieser hier ist viel einfacher.

27voto

Youddh Punkte 1506

Versuche dies

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);

1 Stimmen

Für Informationen dazu, wie man Google Play unabhängig öffnet (nicht in einem neuen View innerhalb derselben App eingebettet), schauen Sie sich bitte meine Antwort an.

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