698 Stimmen

Wie kann ich den Google Play Store direkt von meiner Android-Anwendung aus öffnen?

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, um die Option (Browser/Play Store) auszuwählen. Ich muss die Anwendung direkt im Play Store öffnen.

1692voto

Cat Punkte 66419

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

Java

final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
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")))
}

Wir verwenden eine try/catch blockieren, weil ein Exception wird ausgelöst, wenn der Play Store nicht auf dem Zielgerät installiert ist.

ANMERKUNG : Jede Anwendung kann sich als fähig registrieren, die market://details?id=<appId> URI. Wenn Sie speziell auf Google Play abzielen möchten, können Sie die Lösung in Berták Antwort ist eine gute Alternative.

189voto

Berťák Punkte 7067

Viele Antworten hier schlagen vor, Folgendes zu verwenden Uri.parse("market://details?id=" + appPackageName)) um Google Play zu öffnen, aber ich denke, es ist unzureichend in der Tat:

Einige Anwendungen von Drittanbietern können ihre eigenen Intent-Filter mit "market://" Schema definiert So können sie die gelieferte Uri anstelle von Google Play verarbeiten (ich habe diese Situation z. B. mit der Anwendung SnapPea 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 in der GP-Store-App relevant ist usw.

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

public static void openAppRating(Context context) {
    // you can also use BuildConfig.APPLICATION_ID
    String appId = context.getPackageName();
    Intent rateIntent = new Intent(Intent.ACTION_VIEW,
        Uri.parse("market://details?id=" + appId));
    boolean marketFound = false;

    // find all applications able to handle our rateIntent
    final List<ResolveInfo> otherApps = context.getPackageManager()
        .queryIntentActivities(rateIntent, 0);
    for (ResolveInfo otherApp: otherApps) {
        // look for Google Play application
        if (otherApp.activityInfo.applicationInfo.packageName
                .equals("com.android.vending")) {

            ActivityInfo otherAppActivity = otherApp.activityInfo;
            ComponentName componentName = new ComponentName(
                    otherAppActivity.applicationInfo.packageName,
                    otherAppActivity.name
                    );
            // make sure it does NOT open in the stack of your activity
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            // task reparenting if needed
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            // if the Google Play was already open in a search result
            //  this make sure it still go to the app page you requested
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            // this make sure only the Google Play app is allowed to
            // intercept the intent
            rateIntent.setComponent(componentName);
            context.startActivity(rateIntent);
            marketFound = true;
            break;

        }
    }

    // if GP not present on device, open web browser
    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 mehr Anwendungen als Google Play unsere Absicht öffnen können, der App-Auswahl-Dialog übersprungen und die GP-App direkt gestartet wird.

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

Siehe diese Antwort um zu verstehen, was Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED tut.

103voto

Najib.Nj Punkte 3593

Gehen Sie auf Android Developer offiziellen Link als Tutorial Schritt für Schritt zu sehen und bekam den Code für Ihre Anwendung Paket von Play Store, wenn vorhanden oder Play Store Apps nicht vorhanden ist, dann öffnen Sie die Anwendung von Web-Browser.

Offizieller Link für Android-Entwickler

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

Verknüpfung mit einer Anwendungsseite

Von einer Website: https://play.google.com/store/apps/details?id=<package_name>

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

Verknüpfung mit einer Produktliste

Von einer Website: https://play.google.com/store/search?q=pub:<publisher_name>

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

Verknüpfung mit einem Suchergebnis

Von einer Website: https://play.google.com/store/search?q=<search_query>&c=apps

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

35voto

M3-n50 Punkte 783

Erics Antwort ist zwar richtig und Bertáks Code funktioniert auch. Ich denke, dies kombiniert beides eleganter.

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 das Exception gefangen werden.

27voto

Youddh Punkte 1506

Versuchen Sie dies

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

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