Comment ouvrir le Google Play Store directement depuis mon application Android?

J’ai ouvert la boutique Google Play en utilisant le code suivant

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);. 

Mais il me montre une vue d’action complète pour sélectionner l’option (navigateur / magasin de lecture). Je dois ouvrir l’application directement dans playstore.

Vous pouvez le faire en utilisant le préfixe market:// .

 final Ssortingng 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))); } 

Nous utilisons un bloc try/catch car une Exception sera levée si le Play Store n’est pas installé sur le périphérique cible.

REMARQUE : toute application peut s’inscrire comme capable de gérer le market://details?id= Uri, si vous souhaitez cibler spécifiquement Google Play, vérifiez la réponse Berťák

Beaucoup de réponses suggèrent d’utiliser Uri.parse("market://details?id=" + appPackageName)) pour ouvrir Google Play, mais je pense que c’est insuffisant :

Certaines applications tierces peuvent utiliser leurs propres filtres d’intention avec le schéma "market://" défini , ce qui leur permet de traiter les Uri fournis au lieu de Google Play (j’ai rencontré cette situation avec l’application egSnapPea). La question est “Comment ouvrir le Google Play Store?”, Donc je suppose que vous ne voulez pas ouvrir d’autres applications. Veuillez également noter que, par exemple, la note de l’application n’est pertinente que dans l’application GP Store, etc.

Pour ouvrir Google Play ET UNIQUEMENT Google Play, j’utilise cette méthode:

 public static void openAppRating(Context context) { // you can also use BuildConfig.APPLICATION_ID Ssortingng 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 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); } } 

Le fait est que lorsque plusieurs applications à côté de Google Play peuvent ouvrir notre intention, la boîte de dialog de sélection des applications est ignorée et l’application GP est lancée directement.

MISE À JOUR: Parfois, il semble qu’il ouvre l’application GP uniquement, sans ouvrir le profil de l’application. Comme TrevorWiley l’a suggéré dans son commentaire, Intent.FLAG_ACTIVITY_CLEAR_TOP pourrait résoudre le problème. (Je ne l’ai pas encore testé moi-même …)

Voir cette réponse pour comprendre ce Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED fait Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED .

Aller sur le lien officiel du développeur Android comme tutoriel étape par étape voir et obtenir le code de votre package d’application de play store s’il existe ou jouer à des applications de magasin n’existe pas, puis ouvrir l’application à partir du navigateur Web.

Lien officiel du développeur Android

http://developer.android.com/dissortingbute/tools/promote/linking.html

Liaison à une page Applicaiton

À partir d’un site Web: http://play.google.com/store/apps/details?id=

Depuis une application Android: market://details?id=

Liaison à une liste de produits

À partir d’un site Web: http://play.google.com/store/search?q=pub:

Depuis une application Android: market://search?q=pub:

Liaison à un résultat de recherche

À partir d’un site Web: http://play.google.com/store/search?q=&c=apps

A partir d’une application Android: market://search?q=&c=apps

essaye ça

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

Toutes les réponses ci-dessus ouvrent Google Play dans une nouvelle vue de la même application, si vous souhaitez réellement ouvrir Google Play (ou toute autre application) de manière indépendante:

 Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.android.vending"); // package name and activity ComponentName comp = new ComponentName("com.android.vending", "com.google.android.finsky.activities.LaunchUrlHandlerActivity"); launchIntent.setComponent(comp); // sample to open facebook app launchIntent.setData(Uri.parse("market://details?id=com.facebook.katana")); startActivity(launchIntent); 

La partie importante est que réellement ouvre Google Play ou toute autre application indépendamment.

La plupart de ce que j’ai vu utilise l’approche des autres réponses et ce n’était pas ce dont j’avais besoin, j’espère que cela aiderait quelqu’un.

Cordialement.

Vous pouvez vérifier si l’application Google Play Store est installée et, si tel est le cas, vous pouvez utiliser le protocole “market: //” .

 final Ssortingng my_package_name = "........." // <- HERE YOUR PACKAGE NAME!! String url = ""; try { //Check whether Google Play store is installed or not: this.getPackageManager().getPackageInfo("com.android.vending", 0); url = "market://details?id=" + my_package_name; } catch ( final Exception e ) { url = "https://play.google.com/store/apps/details?id=" + my_package_name; } //Open the app page in Google Play store: final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); startActivity(intent); 

marché d’utilisation: //

 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + my_packagename)); 

Alors que la réponse d’Eric est correcte et que le code de Berťák fonctionne également. Je pense que cela combine les deux plus élégamment.

 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))); } 

En utilisant setPackage , vous forcez le périphérique à utiliser le Play Store. S’il n’y a pas de Play Store installé, l’ Exception sera interceptée.

Tu peux faire:

 final Uri marketUri = Uri.parse("market://details?id=" + packageName); startActivity(new Intent(Intent.ACTION_VIEW, marketUri)); 

obtenir la référence ici :

Vous pouvez également essayer l’approche décrite dans la réponse acceptée à cette question: Impossible de déterminer si Google Play Store est installé ou non sur un périphérique Android

Solution prête à l’emploi:

 public class GoogleServicesUtils { public static void openAppInGooglePlay(Context context) { final Ssortingng appPackageName = context.getPackageName(); try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); } catch (android.content.ActivityNotFoundException e) { // if there is no Google Play on device context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); } } } 

Basé sur la réponse d’Eric.

Si vous souhaitez ouvrir Google Play Store à partir de votre application, utilisez cette commande directy: market://details?gotohome=com.yourAppName , cela ouvrira les pages du magasin Google Play de votre application.

Afficher toutes les applications par un éditeur spécifique

Rechercher des applications utilisant la requête sur son titre ou sa description

Référence: https://sortingcklio.com/market-details-gotohome-1/

 public void launchPlayStore(Context context, Ssortingng packageName) { Intent 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))); } } 

Ma fonction de kotlin à cette fin

 fun Context.canPerformIntent(intent: Intent): Boolean { val mgr = this.packageManager val list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) return list.size > 0 } 

Et dans votre activité

 val uri = if (canPerformIntent(Intent(Intent.ACTION_VIEW, Uri.parse("market://")))) { Uri.parse("market://details?id=" + appPackageName) } else { Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName) } startActivity(Intent(Intent.ACTION_VIEW, uri)) 

Voici le code final des réponses ci-dessus qui tente d’ouvrir l’application à l’aide de l’application Google Play Store et de jouer spécifiquement à store, s’il échoue, il lancera la vue d’action à l’aide de la version Web: Crédits @Eric, @Jonathan Caballero

 public void goToPlayStore() { Ssortingng playStoreMarketUrl = "market://details?id="; Ssortingng playStoreWebUrl = "https://play.google.com/store/apps/details?id="; Ssortingng packageName = getActivity().getPackageName(); try { Intent intent = getActivity() .getPackageManager() .getLaunchIntentForPackage("com.android.vending"); if (intent != null) { ComponentName androidComponent = new ComponentName("com.android.vending", "com.google.android.finsky.activities.LaunchUrlHandlerActivity"); intent.setComponent(androidComponent); intent.setData(Uri.parse(playStoreMarketUrl + packageName)); } else { intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreMarketUrl + packageName)); } startActivity(intent); } catch (ActivityNotFoundException e) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreWebUrl + packageName)); startActivity(intent); } } 

J’ai combiné Berťák et Stefano Munarini pour créer une solution hybride qui gère à la fois le scénario Évaluer cette application et Afficher les applications .

  /** * This method checks if GooglePlay is installed or not on the device and accordingly handle * Intents to view for rate App or Publisher's Profile * * @param showPublisherProfile pass true if you want to open Publisher Page else pass false to open APp page * @param publisherID pass Dev ID if you have passed PublisherProfile true */ public void openPlayStore(boolean showPublisherProfile, Ssortingng publisherID) { //Error Handling if (publisherID == null || !publisherID.isEmpty()) { publisherID = ""; //Log and continue Log.w("openPlayStore Method", "publisherID is invalid"); } Intent openPlayStoreIntent; boolean isGooglePlayInstalled = false; if (showPublisherProfile) { //Open Publishers Profile on PlayStore openPlayStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pub:" + publisherID)); } else { //Open this App on PlayStore openPlayStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())); } // find all applications who can handle openPlayStoreIntent final List otherApps = getPackageManager() .queryIntentActivities(openPlayStoreIntent, 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 openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // task reparenting if needed openPlayStoreIntent.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 openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this make sure only the Google Play app is allowed to // intercept the intent openPlayStoreIntent.setComponent(componentName); startActivity(openPlayStoreIntent); isGooglePlayInstalled = true; break; } } // if Google Play is not Installed on the device, open web browser if (!isGooglePlayInstalled) { Intent webIntent; if (showPublisherProfile) { //Open Publishers Profile on web browser webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/search?q=pub:" + getPackageName())); } else { //Open this App on web browser webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName())); } startActivity(webIntent); } } 

Usage

  • Ouvrir le profil des éditeurs
  @OnClick(R.id.ll_more_apps) public void showMoreApps() { openPlayStore(true, "Hitesh Sahu"); } 
  • Ouvrir la page de l’application sur PlayStore
 @OnClick(R.id.ll_rate_this_app) public void openAppInPlayStore() { openPlayStore(false, ""); } 

Si vous voulez ouvrir Play Market pour rechercher des applications (par exemple, “pdf”), utilisez ceci:

 private void openPlayMarket(Ssortingng query) { try { // If Play Services are installed. startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=" + query))); } catch (ActivityNotFoundException e) { // Open in a browser. startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/search?q=" + query))); } }