¿Cómo abrir Google Play Store directamente desde mi aplicación de Android?

569

He abierto la tienda Google Play usando el siguiente código

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

Pero me muestra una Vista de acción completa para seleccionar la opción (navegador / play store). Necesito abrir la aplicación en Play Store directamente.

Rajesh Kumar
fuente

Respuestas:

1437

Puedes hacer esto usando el market://prefijo .

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

Usamos un try/catchbloque aquí porque se Exceptionlanzará si Play Store no está instalado en el dispositivo de destino.

NOTA : cualquier aplicación puede registrarse como capaz de manejar el market://details?id=<appId>Uri, si desea apuntar específicamente a Google Play, verifique la respuesta de Berťák

Eric
fuente
53
si desea redirigir a todas las aplicaciones del desarrollador use market://search?q=pub:"+devNameyhttp://play.google.com/store/search?q=pub:"+devName
Stefano Munarini
44
Esta solución no funciona si alguna aplicación usa un filtro de intención con el esquema "market: //" definido. Vea mi respuesta sobre cómo abrir Google Play Y SOLAMENTE la aplicación Google Play (o navegador web si GP no está presente). :-)
Berťák
18
Para proyectos que utilizan el sistema de compilación Gradle, appPackageNamede hecho BuildConfig.APPLICATION_ID. No Context/ Activitydependencias, lo que reduce el riesgo de pérdidas de memoria.
Christian García
3
Todavía necesita el contexto para lanzar la intención. Context.startActivity ()
wblaschko
2
Esta solución supone que hay una intención de abrir un navegador web. Esto no siempre es cierto (como en Android TV), así que tenga cuidado. Es posible que desee utilizar intent.resolveActivity (getPackageManager ()) para determinar qué hacer.
Coda
161

Muchas respuestas aquí sugieren usar Uri.parse("market://details?id=" + appPackageName)) para abrir Google Play, pero creo que, de hecho, es insuficiente :

Algunas aplicaciones de terceros pueden usar sus propios filtros de intención con el "market://"esquema definido , por lo tanto, pueden procesar Uri suministrado en lugar de Google Play (Experimenté esta situación con, por ejemplo, la aplicación SnapPea). La pregunta es "¿Cómo abrir Google Play Store?", Así que supongo que no desea abrir ninguna otra aplicación. Tenga en cuenta también que, por ejemplo, la calificación de la aplicación solo es relevante en la aplicación GP Store, etc.

Para abrir Google Play Y SOLO Google Play utilizo este método:

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

El punto es que cuando más aplicaciones además de Google Play pueden abrir nuestra intención, se omite el diálogo de selección de aplicaciones y la aplicación GP se inicia directamente.

ACTUALIZACIÓN: a veces parece que solo abre la aplicación GP, ​​sin abrir el perfil de la aplicación. Como TrevorWiley sugirió en su comentario, Intent.FLAG_ACTIVITY_CLEAR_TOPpodría solucionar el problema. (No lo probé yo mismo todavía ...)

Vea esta respuesta para entender lo que Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDhace.

Berťák
fuente
44
Si bien esto es bueno, también parece poco confiable con la compilación actual de Google Play, si ingresa a otra página de aplicaciones en Google Play y luego activa este código, simplemente abrirá Google Play pero no irá a su aplicación.
zoltish
2
@zoltish, agregué Intent.FLAG_ACTIVITY_CLEAR_TOP a las banderas y eso parece solucionar el problema
TrevorWiley
He usado Intent.FLAG_ACTIVITY_CLEAR_TOP | Intención.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED pero no funciona. no hay ninguna nueva instancia abierta de Play store
Praveen Kumar Verma
3
¿Qué sucede si rateIntent.setPackage("com.android.vending")sueles asegurarte de que la aplicación PlayStore manejará esta intención, en lugar de todo este código?
dum4ll3
3
@ dum4ll3 Supongo que puedes, pero este código también verifica implícitamente si la aplicación Google Play está instalada. Si no lo marca, debe atrapar ActivityNotFound
Daniele Segato el
81

Vaya al enlace oficial del desarrollador de Android como tutorial paso a paso, vea y obtenga el código de su paquete de aplicaciones de Play Store si existe o si las aplicaciones de Play Store no existen, abra la aplicación desde el navegador web.

Enlace oficial del desarrollador de Android

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

Vinculación a una página de aplicación

Desde un sitio web: https://play.google.com/store/apps/details?id=<package_name>

Desde una aplicación de Android: market://details?id=<package_name>

Vinculación a una lista de productos

Desde un sitio web: https://play.google.com/store/search?q=pub:<publisher_name>

Desde una aplicación de Android: market://search?q=pub:<publisher_name>

Vinculación a un resultado de búsqueda

Desde un sitio web: https://play.google.com/store/search?q=<search_query>&c=apps

Desde una aplicación de Android: market://search?q=<seach_query>&c=apps

Najib Ahmed Puthawala
fuente
El uso de market: // prefijo ya no se recomienda (consulte el enlace que publicó)
Greg Ennis
@GregEnnis donde ves ese mercado: // ¿ya no se recomienda el prefijo //?
loki
@loki Creo que el punto es que ya no aparece como una sugerencia. Si busca la palabra en esa página market, no encontrará ninguna solución. Creo que la nueva forma es disparar una intención más genérica developer.android.com/distribute/marketing-tools/… . Las versiones más recientes de la aplicación Play Store probablemente tengan un filtro de intención para este URIhttps://play.google.com/store/apps/details?id=com.example.android
tir38
25

prueba esto

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);
Youddh
fuente
1
Para saber cómo abrir Google Play de forma independiente (no incrustado en una nueva vista en la misma aplicación), consulte mi respuesta.
code4jhon
21

Todas las respuestas anteriores abren Google Play en una nueva vista de la misma aplicación, si realmente desea abrir Google Play (o cualquier otra aplicación) de forma independiente:

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 parte importante es que realmente abre Google Play o cualquier otra aplicación de forma independiente.

La mayor parte de lo que he visto usa el enfoque de las otras respuestas y no era lo que necesitaba, espero que esto ayude a alguien.

Saludos.

code4jhon
fuente
¿Qué es this.cordova? ¿Dónde están las declaraciones de variables? ¿Dónde se callbackdeclara y define?
Eric
esto es parte de un complemento de Cordova, no creo que sea realmente relevante ... solo necesita una instancia de PackageManager e iniciar una actividad de manera regular, pero este es el complemento de cordova de github.com/lampaa que sobrescribí aquí github.com/code4jhon/org.apache.cordova.startapp
code4jhon
44
Mi punto es simplemente que, este código no es realmente algo que la gente pueda simplemente transferir a su propia aplicación para usar. Recortar la grasa y dejar solo el método central sería útil para futuros lectores.
Eric
Sí, entiendo ... por ahora estoy en aplicaciones híbridas. Realmente no puedo probar el código completamente nativo. Pero creo que la idea está ahí. Si tengo la oportunidad, agregaré líneas nativas exactas.
code4jhon
con suerte esto lo hará @eric
code4jhon
14

Puede verificar si la aplicación Google Play Store está instalada y, si este es el caso, puede usar el protocolo "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
fuente
1
Para saber cómo abrir Google Play de forma independiente (no incrustado en una nueva vista en la misma aplicación), consulte mi respuesta.
code4jhon
12

Si bien la respuesta de Eric es correcta y el código de Berťák también funciona. Creo que esto combina ambos con más elegancia.

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

Al usarlo setPackage, obligas al dispositivo a usar Play Store. Si no hay una Play Store instalada, la Exceptioncapturaremos.

M3-n50
fuente
Los documentos oficiales usan en https://play.google.com/store/apps/details?id=lugar de market:¿Cómo es que? developer.android.com/distribute/marketing-tools/… Sigue siendo una respuesta completa y breve.
serv-inc
No estoy seguro, pero creo que es un acceso directo que Android se traduce como " play.google.com/store/apps ". Probablemente también pueda usar "market: //" en la excepción.
M3-n50
11

use market: //

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

Tu puedes hacer:

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

obtener referencia aquí :

También puede probar el enfoque descrito en la respuesta aceptada de esta pregunta: No se puede determinar si Google Play Store está instalado o no en el dispositivo Android

almalkawi
fuente
Ya lo he intentado con este código, esto también muestra la opción de seleccionar el navegador / play store, porque mi dispositivo ha instalado ambas aplicaciones (google play store / browser).
Rajesh Kumar
Para saber cómo abrir Google Play de forma independiente (no incrustado en una nueva vista en la misma aplicación), consulte mi respuesta.
code4jhon
7

Muy tarde en la fiesta Los documentos oficiales están aquí. Y el código descrito es

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(
    "https://play.google.com/store/apps/details?id=com.example.android"));
intent.setPackage("com.android.vending");
startActivity(intent);

A medida que se configura esta intención, pasar "com.android.vending"a Intent.setPackage()fin de que los usuarios ven los detalles de su aplicación en la aplicación de Google Play Store en lugar de un selector . para KOTLIN

val intent = Intent(Intent.ACTION_VIEW).apply {
    data = Uri.parse(
            "https://play.google.com/store/apps/details?id=com.example.android")
    setPackage("com.android.vending")
}
startActivity(intent)

Si ha publicado una aplicación instantánea con Google Play Instant, puede iniciar la aplicación de la siguiente manera:

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri.Builder uriBuilder = Uri.parse("https://play.google.com/store/apps/details")
    .buildUpon()
    .appendQueryParameter("id", "com.example.android")
    .appendQueryParameter("launch", "true");

// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using
// Activity.getIntent().getData().
uriBuilder.appendQueryParameter("referrer", "exampleCampaignId");

intent.setData(uriBuilder.build());
intent.setPackage("com.android.vending");
startActivity(intent);

Para KOTLIN

val uriBuilder = Uri.parse("https://play.google.com/store/apps/details")
        .buildUpon()
        .appendQueryParameter("id", "com.example.android")
        .appendQueryParameter("launch", "true")

// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using Activity.intent.data.
uriBuilder.appendQueryParameter("referrer", "exampleCampaignId")

val intent = Intent(Intent.ACTION_VIEW).apply {
    data = uriBuilder.build()
    setPackage("com.android.vending")
}
startActivity(intent)
Husnain Qasim
fuente
Creo que esto está mal, al menos Uri.parse("https://play.google.com/store/apps/details?id=,. En algunos dispositivos, abre el navegador web en lugar de Play Market.
CoolMind
Todo el código está tomado de documentos oficiales. El enlace también se adjunta en el código de respuesta que se describe aquí para una referencia rápida.
Husnain Qasim
@Cool: la razón de esto probablemente se deba a que esos dispositivos tienen una versión anterior de la aplicación Play Store que no tiene un filtro de intención que coincida con ese URI.
tir38
@ tir38, tal vez sea así. Quizás no tengan servicios de Google Play o no estén autorizados en ellos, no lo recuerdo.
CoolMind
6

Como los documentos oficiales usan en https://lugar de market://, esto combina la respuesta de Eric y M3-n50 con la reutilización del código (no lo repita):

Intent intent = new Intent(Intent.ACTION_VIEW)
    .setData(Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
try {
    startActivity(new Intent(intent)
                  .setPackage("com.android.vending"));
} catch (android.content.ActivityNotFoundException exception) {
    startActivity(intent);
}

Intenta abrirse con la aplicación GPlay si existe y vuelve a los valores predeterminados.

serv-inc
fuente
5

Solución lista para usar:

public class GoogleServicesUtils {

    public static void openAppInGooglePlay(Context context) {
        final String 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)));
        }
    }

}

Basado en la respuesta de Eric.

Alexandr
fuente
1
¿Funciona para ti? Abre la página principal de Google Play, no la página de mi aplicación.
Violet Giraffe
4

Kotlin:

Extensión:

fun Activity.openAppInGooglePlay(){

val appId = BuildConfig.APPLICATION_ID
try {
    this.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appId")))
} catch (anfe: ActivityNotFoundException) {
    this.startActivity(
        Intent(
            Intent.ACTION_VIEW,
            Uri.parse("https://play.google.com/store/apps/details?id=$appId")
        )
    )
}}

Método:

    fun openAppInGooglePlay(activity:Activity){

        val appId = BuildConfig.APPLICATION_ID
        try {
            activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appId")))
        } catch (anfe: ActivityNotFoundException) {
            activity.startActivity(
                Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("https://play.google.com/store/apps/details?id=$appId")
                )
            )
        }
    }
Danielvgftv
fuente
3

Si desea abrir la tienda Google Play desde su aplicación, utilice este comando directamente: market://details?gotohome=com.yourAppNameabrirá las páginas de la tienda Google Play de su aplicación.

Mostrar todas las aplicaciones de un editor específico

Busque aplicaciones que usan la consulta en su título o descripción

Referencia: https://tricklio.com/market-details-gotohome-1/

Tahmid
fuente
3

Kotlin

fun openAppInPlayStore(appPackageName: String) {
    try {
        startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appPackageName")))
    } catch (exception: android.content.ActivityNotFoundException) {
        startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")))
    }
}
Khemraj
fuente
2
public void launchPlayStore(Context context, String 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)));
        }
    }
Sharath kumar
fuente
2

Mi función de entretenimiento kotlin para este propósito

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

Y en tu actividad

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))
Arpan Sarkar
fuente
2

Aquí está el código final de las respuestas anteriores que primero intenta abrir la aplicación usando la aplicación Google Play Store y específicamente Play Store, si falla, comenzará la vista de acción usando la versión web: Créditos a @Eric, @Jonathan Caballero

public void goToPlayStore() {
        String playStoreMarketUrl = "market://details?id=";
        String playStoreWebUrl = "https://play.google.com/store/apps/details?id=";
        String 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);
        }
    }
MoGa
fuente
2

Este enlace abrirá la aplicación automáticamente en el mercado: // si está en Android y en el navegador si está en la PC.

https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Nikolay Shindarov
fuente
¿Qué quieres decir? ¿Intentaste mi solución? Funcionó para mi.
Nikolay Shindarov
En realidad, en mi tarea, hay una vista web y en la vista web tengo que cargar cualquier URL. pero en el caso de que haya una url de PlayStore abierta, se mostrará el botón Abrir PlayStore. así que necesito abrir la aplicación al hacer clic en ese botón. será dinámico para cualquier aplicación, entonces, ¿cómo puedo administrarlo?
hpAndro
Solo prueba el enlacehttps://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Nikolay Shindarov,
1

He combinado la respuesta de Berťák y Stefano Munarini para crear una solución híbrida que maneja tanto el escenario Valorar esta aplicación como Mostrar más aplicación .

        /**
         * 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, String 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<ResolveInfo> 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);
            }
        }

Uso

  • Para abrir el perfil del editor
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • Para abrir la página de la aplicación en PlayStore
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}
Hitesh Sahu
fuente
Sugeriría dividir este código en métodos más pequeños. Es difícil encontrar un código importante en este espagueti :) Además, estás buscando "com.android.vending", ¿qué hay de com.google.market?
Aetherna
1

Pueblos, no olviden que en realidad podrían obtener algo más de eso. Me refiero al seguimiento UTM, por ejemplo. 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));
}
Alex
fuente
1

Una versión de Kotlin con respaldo y sintaxis actual

 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)
    }
}
kuzdu
fuente