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

3voto

Sharath kumar Punkte 3964
Öffentliche void launchPlayStore(Context context, String paketName) {
    Intent intent = null;
    try {
            intent = new Intent(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("market://details?id=" + paketName));
            context.startActivity(intent);
        } catch (android.content.ActivityNotFoundException anfe) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + paketName)));
        }
    }

3voto

Hitesh Sahu Punkte 37527

Ich habe sowohl die Antwort von Berták als auch die Antwort von Stefano Munarini kombiniert, um eine Hybridlösung zu erstellen, die sowohl das Szenario Bewerte diese App als auch das Szenario Mehr Apps anzeigen behandelt.

        /**
         * Diese Methode überprüft, ob GooglePlay auf dem Gerät installiert ist oder nicht, und behandelt entsprechend
         * Intents zum Anzeigen der Bewertung der App oder des Publisher-Profils
         *
         * @param showPublisherProfile setze true, wenn du die Publisher-Seite öffnen möchtest, andernfalls setze false, um die App-Seite zu öffnen
         * @param publisherID          gib die Dev-ID an, wenn du Publisher-Profil true übergeben hast
         */
        public void openPlayStore(boolean showPublisherProfile, String publisherID) {

            //Fehlerbehandlung
            if (publisherID == null || !publisherID.isEmpty()) {
                publisherID = "";
                //Log und weiter
                Log.w("openPlayStore Methode", "publisherID ist ungültig");
            }

            Intent openPlayStoreIntent;
            boolean isGooglePlayInstalled = false;

            if (showPublisherProfile) {
                //Öffne Publisher-Profil im PlayStore
                openPlayStoreIntent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse("market://search?q=pub:" + publisherID));
            } else {
                //Öffne diese App im PlayStore
                openPlayStoreIntent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse("market://details?id=" + getPackageName()));
            }

            //Finde alle Anwendungen, die openPlayStoreIntent verarbeiten können
            final List otherApps = getPackageManager()
                    .queryIntentActivities(openPlayStoreIntent, 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
                    );
                    //Stelle sicher, dass es NICHT im Stapel deiner Aktivität geöffnet wird
                    openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    //Task-Umleitung, falls erforderlich
                    openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                    //Wenn Google Play bereits in einem Suchergebnis geöffnet war,
                    //stelle sicher, dass es immer noch zur angeforderten App-Seite geht
                    openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    //Stelle sicher, dass nur die Google Play App den Intent abfangen kann
                    openPlayStoreIntent.setComponent(componentName);
                    startActivity(openPlayStoreIntent);
                    isGooglePlayInstalled = true;
                    break;

                }
            }
            //Wenn Google Play nicht auf dem Gerät installiert ist, öffne den Webbrowser
            if (!isGooglePlayInstalled) {

                Intent webIntent;
                if (showPublisherProfile) {
                    //Öffne Publisher-Profil im Webbrowser
                    webIntent = new Intent(Intent.ACTION_VIEW,
                            Uri.parse("http://play.google.com/store/search?q=pub:" + getPackageName()));
                } else {
                    //Öffne diese App im Webbrowser
                    webIntent = new Intent(Intent.ACTION_VIEW,
                            Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
                }
                startActivity(webIntent);
            }
        }

Verwendung

  • Um das Publisher-Profil zu öffnen
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • Um die App-Seite im PlayStore zu öffnen
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}

0 Stimmen

Ich würde vorschlagen, diesen Code in kleinere Methoden aufzuteilen. Es ist schwer, wichtigen Code in diesem Spaghetti zu finden :) Außerdem überprüfst du auf "com.android.vending", was ist mit com.google.market?

2voto

kuzdu Punkte 6371

Eine Kotlin-Version mit Fallback und aktueller Syntax

 fun openAppInPlayStore() {
    val uri = Uri.parse("market://details?id=" + context.packageName)
    val goToMarketIntent = Intent(Intent.ACTION_VIEW, uri)

    var flags = Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_ACTIVITY_MULTIPLE_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
    flags = if (Build.VERSION.SDK_INT >= 21) {
        flags or Intent.FLAG_ACTIVITY_NEW_DOCUMENT
    } else {
        flags or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }

    goToMarketIntent.addFlags(flags)

    try {
        startActivity(context, goToMarketIntent, null)
    } catch (e: ActivityNotFoundException) {
        val intent = Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + context.packageName))

        startActivity(context, intent, null)
    }
}

2voto

Alex Punkte 752

Menschen, vergessen Sie nicht, dass Sie tatsächlich mehr daraus bekommen könnten. Ich meine zum Beispiel das UTM-Tracking. https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

public static final String MODULE_ICON_PACK_FREE = "com.example.iconpack_free";
public static final String APP_STORE_URI =
        "market://details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";
public static final String APP_STORE_GENERIC_URI =
        "https://play.google.com/store/apps/details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";

try {
    startActivity(new Intent(
        Intent.ACTION_VIEW,
        Uri.parse(String.format(Locale.US,
            APP_STORE_URI,
            MODULE_ICON_PACK_FREE,
            getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
} catch (android.content.ActivityNotFoundException anfe) {
    startActivity(new Intent(
        Intent.ACTION_VIEW,
        Uri.parse(String.format(Locale.US,
            APP_STORE_GENERIC_URI,
            MODULE_ICON_PACK_FREE,
            getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}

1voto

developerSumit Punkte 950

Für die Anwendungsbewertung: Weiterleitung zum Playstore. In Flutter können Sie dies über einen Platform-Kanal wie folgt tun:

Flutter Teil:-

static const platform = const MethodChannel('rateApp');   // initialisieren 

onTap: platform.invokeMethod('urls', {'android_id': 'com.xyz'}),

Jetzt der Android Native Teil (Java):

private static final String RATEAPP = "rateApp";  // Variable initialisieren

// Jetzt in der ConfigureFlutterEngine Funktion:

        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), RATEAPP)
            .setMethodCallHandler(
                    (call, result) -> {               
                        if (call.method.equals("urls") && call.hasArgument("android_id")) {
                            String id = call.argument("android_id").toString();

                            try {
                                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("$uri" + id)));
                            } catch (android.content.ActivityNotFoundException anfe) {
                                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + id)));
                            }
                            result.success("Fertig");
                        } else {
                            result.notImplemented();
                        }
                    }
            );

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