lien ouvert de google play store dans la version mobile android

88

J'ai le lien de mes autres applications dans ma dernière application et je les ouvre de cette façon.

Uri uri = Uri.parse("url");
Intent intent = new Intent (Intent.ACTION_VIEW, uri); 
startActivity(intent);

ce code ouvre la version du navigateur de google play store.

Lorsque vous essayez d'ouvrir à partir de mon téléphone, le téléphone me demande si je veux utiliser un navigateur ou Google Play et si je choisis le second, il ouvre la version mobile de Google Play Store.

Pouvez-vous me dire comment cela peut-il arriver à la fois? Je veux dire ne pas me demander mais ouvrir directement la version mobile de google play, celle que je vois en l'ouvrant directement depuis le téléphone.

cavalier fantôme
la source
1
Je souhaite que l'avant-dernier paragraphe soit vrai pour moi. L'utilisation du lien http disponible ici: developer.android.com/distribute/googleplay/promote/… ne demande pas à l'utilisateur de choisir l'application ou le navigateur. Il suppose toujours le navigateur. Malheureusement, je ne peux pas non plus utiliser le market://protocole. Quelqu'un d'autre voit-il ce comportement?
SilithCrowe

Réponses:

265

Vous voudrez utiliser le marketprotocole spécifié :

final String appPackageName = "com.example"; // Can also use getPackageName(), as below
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));

Gardez à l'esprit que cela plantera sur tout appareil sur lequel Market n'est pas installé (l'émulateur, par exemple). Par conséquent, je suggérerais quelque chose comme:

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("http://play.google.com/store/apps/details?id=" + appPackageName)));
}

Tout en utilisant getPackageName()de Contextou sous-classe de celui-ci pour la cohérence (merci @cprcrack !). Pour en savoir plus sur les intentions de marché, cliquez ici: lien .

Eric
la source
L'ouverture de ce qui suit dans le navigateur n'ouvre pas Google Play: market: // details? Id = pandora
IgorGanapolsky
1
L'ID est le nom du package, pas le nom de l'application. Essayez market://details?id=com.PandoraTV( en supposant que c'est l'application que vous voulez).
Eric
9
Cette réponse concerne l'utilisation du market://préfixe de votre propre application, et non d'un site Web via le navigateur. Je peux attester de sa fonctionnalité (sur les versions 2.3, 3.x, 4.0, 4.1 et 4.2) et il fonctionne avec le navigateur d'origine, Chrome Beta 25 et Chrome 18.
Eric
1
Oui, Chrome est une application, mais cela obligerait ses créateurs [Google] à utiliser ce code, pas les personnes [vous] qui créent les sites Web. En l'état, ce code vise à aider les personnes qui structurent des liens spécifiquement à partir de leurs applications.
Eric
2
Vous pouvez utiliser getPackageName()pour récupérer automatiquement l'identifiant de l'application.
cprcrack
6

Le code ci-dessous peut vous aider à afficher le lien d'application de Google Play Sore dans la version mobile.

Pour le lien d'application:

Uri uri = Uri.parse("market://details?id=" + mContext.getPackageName());
Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);

  try {
        startActivity(myAppLinkToMarket);

      } catch (ActivityNotFoundException e) {

        //the device hasn't installed Google Play
        Toast.makeText(Setting.this, "You don't have Google Play installed", Toast.LENGTH_LONG).show();
              }

Pour le lien développeur:

Uri uri = Uri.parse("market://search?q=pub:" + YourDeveloperName);
Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);

            try {

                startActivity(myAppLinkToMarket);

            } catch (ActivityNotFoundException e) {

                //the device hasn't installed Google Play
                Toast.makeText(Settings.this, "You don't have Google Play installed", Toast.LENGTH_LONG).show();

            } 
Chirag Ghori
la source
3

Vous pouvez utiliser la bibliothèque Android Intents pour ouvrir la page de votre application sur Google Play comme ça:

Intent intent = IntentUtils.openPlayStore(getApplicationContext());
startActivity(intent);
Dmitriy Tarasov
la source
2
Notez que les réponses par lien uniquement sont déconseillées, les réponses SO devraient être le point final d'une recherche de solution (par rapport à une autre étape de références, qui ont tendance à devenir obsolètes avec le temps). Veuillez envisager d'ajouter un synopsis autonome ici, en gardant le lien comme référence.
kleopatra
4
Il serait utile d'inclure une clause de non-responsabilité indiquant qu'il s'agit de votre bibliothèque et que la fonction est implémentée à peu près de la même manière que la réponse acceptée.
ta.speot.is
1

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 String 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);
Paolo Rovelli
la source
0

Ouvrez la page de l'application sur Google Play:

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

la source