Como abrir a Google Play Store diretamente do meu aplicativo Android?

569

Abri a loja do Google Play usando o código a seguir

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

Mas ele me mostra uma visão completa da ação para selecionar a opção (navegador / loja de jogos). Preciso abrir o aplicativo na Play Store diretamente.

Rajesh Kumar
fonte

Respostas:

1436

Você pode fazer isso usando o market://prefixo .

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 um try/catchbloco aqui porque um Exceptionserá lançado se a Play Store não estiver instalada no dispositivo de destino.

OBSERVAÇÃO : qualquer aplicativo pode se registrar como capaz de lidar com o market://details?id=<appId>Uri. Se você deseja segmentar especificamente o Google Play, verifique a resposta em Berťák

Eric
fonte
53
se você quiser redirecionar para aplicativos tudo do desenvolvedor usar market://search?q=pub:"+devNameehttp://play.google.com/store/search?q=pub:"+devName
Stefano Munarini
4
Esta solução não funciona, se algum aplicativo usar filtro de intenção com o esquema "market: //" definido. Veja minha resposta sobre como abrir o aplicativo Google Play AND ONLY Google Play (ou navegador da web se o GP não estiver presente). :-)
Berťák
18
Para projetos que usam o sistema de construção Gradle, appPackageNameé de fato BuildConfig.APPLICATION_ID. Sem Context/ Activitydependências, reduzindo o risco de vazamento de memória.
Christian García
3
Você ainda precisa do contexto para iniciar a intenção. Context.startActivity ()
wblaschko
2
Esta solução pressupõe a intenção de abrir um navegador da web. Isso nem sempre é verdade (como na Android TV), portanto, tenha cuidado. Você pode usar intent.resolveActivity (getPackageManager ()) para determinar o que fazer.
Coda
161

Muitas respostas aqui sugerem usar Uri.parse("market://details?id=" + appPackageName)) para abrir o Google Play, mas acho que é insuficiente :

Alguns aplicativos de terceiros podem usar seus próprios filtros de intenção com "market://"esquema definido , para que possam processar o Uri fornecido em vez do Google Play (experimentei essa situação com o aplicativo egSnapPea). A pergunta é "Como abrir a Google Play Store?", Presumo que você não deseja abrir nenhum outro aplicativo. Observe também que, por exemplo, a classificação do aplicativo é relevante apenas no aplicativo da GP Store, etc.

Para abrir o Google Play E SOMENTE o Google Play, eu uso 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);
    }
}

O ponto é que quando mais aplicativos ao lado do Google Play podem abrir nossa intenção, a caixa de diálogo do seletor de aplicativos é ignorada e o aplicativo GP é iniciado diretamente.

ATUALIZAÇÃO: Às vezes, parece que ele abre apenas o aplicativo GP, sem abrir o perfil do aplicativo. Como TrevorWiley sugeriu em seu comentário, Intent.FLAG_ACTIVITY_CLEAR_TOPpoderia resolver o problema. (Eu ainda não testei ...)

Veja esta resposta para entender o que Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDfaz.

Berťák
fonte
4
Embora isso seja bom, também não parece confiável com a versão atual do Google Play. Se você inserir outra página de aplicativos no Google Play e acionar esse código, ele abrirá o Google Play, mas não o acessará.
Zoltish
2
@zoltish, eu adicionei Intent.FLAG_ACTIVITY_CLEAR_TOP para as bandeiras e que parece resolver o problema
TrevorWiley
Eu usei Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, mas não funciona. sem qualquer nova instância aberta de loja de jogo
Praveen Kumar Verma
3
O que acontece se você tiver rateIntent.setPackage("com.android.vending")certeza de que o aplicativo PlayStore lidará com essa intenção, em vez de todo esse código?
Dum4ll3 21/09
3
@ dum4ll3 Acho que você pode, mas esse código também verifica implicitamente se o aplicativo Google Play está instalado. Se você não o verificar, precisará capturar o ActivityNotFound
Daniele Segato
81

Acesse o link oficial do desenvolvedor do Android como tutorial, veja o passo a passo e obtenha o código do seu pacote de aplicativos da play store, se existir, ou se não houver aplicativos da play store e abra o aplicativo no navegador da web.

Link oficial do desenvolvedor Android

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

Vinculando a uma página de aplicativo

De um site: https://play.google.com/store/apps/details?id=<package_name>

Em um aplicativo Android: market://details?id=<package_name>

Vinculando a uma lista de produtos

De um site: https://play.google.com/store/search?q=pub:<publisher_name>

Em um aplicativo Android: market://search?q=pub:<publisher_name>

Vinculando a um resultado de pesquisa

De um site: https://play.google.com/store/search?q=<search_query>&c=apps

Em um aplicativo Android: market://search?q=<seach_query>&c=apps

Najib Ahmed Puthawala
fonte
Usando mercado: // prefixo não é mais recomendado (verifique o link que você postou)
Greg Ennis
@GregEnnis onde você vê esse mercado: // prefixo não é mais recomendado?
loki 01/02
@ loki Acho que o ponto é que não está mais listado como sugestão. Se você pesquisar a página pela palavra market, não encontrará solução. Acho que a nova maneira é disparar uma intenção mais genérica developer.android.com/distribute/marketing-tools/… . As versões mais recentes do aplicativo Play Store provavelmente têm um filtro de intenção para este URIhttps://play.google.com/store/apps/details?id=com.example.android
tir38
25

tente isso

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);
Youddh
fonte
1
Para saber como abrir o Google Play de forma independente (não incorporado em uma nova exibição no mesmo aplicativo), verifique minha resposta.
code4jhon
21

Todas as respostas acima abrem o Google Play em uma nova visualização do mesmo aplicativo, se você deseja realmente abrir o Google Play (ou qualquer outro aplicativo) independentemente:

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

A parte importante é que, na verdade, abre o Google Play ou qualquer outro aplicativo de forma independente.

A maior parte do que eu vi usa a abordagem das outras respostas e não era o que eu precisava, espero que isso ajude alguém.

Saudações.

code4jhon
fonte
O que é this.cordova? Onde estão as declarações das variáveis? Onde é callbackdeclarado e definido?
Eric
isso faz parte de um plug-in Cordova, não acho que seja realmente relevante ... você só precisa de uma instância do PackageManager e iniciar uma atividade regularmente, mas esse é o plug-in cordova do github.com/lampaa que eu substitui Aqui github.com/code4jhon/org.apache.cordova.startapp
code4jhon
4
Meu argumento é simplesmente que, esse código não é realmente algo que as pessoas possam simplesmente portar para seu próprio aplicativo para uso. Aparar a gordura e deixar apenas o método principal seria útil para futuros leitores.
Eric
Sim, eu entendo ... por enquanto estou em aplicativos híbridos. Não é possível testar completamente o código nativo. Mas acho que a ideia está aí. Se eu tiver uma chance, adicionarei linhas nativas exatas.
code4jhon
espero que isso o torne @eric
code4jhon
14

Você pode verificar se o aplicativo Google Play Store está instalado e, se for o caso, pode usar o 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
fonte
1
Para saber como abrir o Google Play de forma independente (não incorporado em uma nova exibição no mesmo aplicativo), verifique minha resposta.
code4jhon
12

Enquanto a resposta de Eric está correta e o código de Berťák também funciona. Eu acho que isso combina os dois de maneira mais elegante.

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

Ao usar setPackage, você força o dispositivo a usar a Play Store. Se não houver uma Play Store instalada, Exceptionela será capturada.

M3-n50
fonte
Os documentos oficiais usam em https://play.google.com/store/apps/details?id=vez de market:Como vem? developer.android.com/distribute/marketing-tools/… Ainda é uma resposta abrangente e curta.
serv-inc #
Não tenho certeza, mas acho que é um atalho que o Android traduz para " play.google.com/store/apps ". Provavelmente você também pode usar "market: //" na exceção.
M3-n50 26/06/19
11

use market: //

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

Você pode fazer:

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

obtenha Referência aqui :

Você também pode tentar a abordagem descrita na resposta aceita desta pergunta: Não é possível determinar se o Google Play Store está instalado ou não no dispositivo Android

almalkawi
fonte
Eu já tentei com esse código, isso também mostra a opção de selecionar o navegador / loja de jogos, porque meu dispositivo instalou os dois aplicativos (loja / navegador do Google Play).
Rajesh Kumar
Para saber como abrir o Google Play de forma independente (não incorporado em uma nova exibição no mesmo aplicativo), verifique minha resposta.
code4jhon
7

Muito tarde na festa Os documentos oficiais estão aqui. E o código descrito é

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

Como você configurar esta intenção, passar "com.android.vending"para Intent.setPackage()modo que os usuários ver detalhes de seu aplicativo no aplicativo Google Play Store em vez de um seletor . 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)

Se você publicou um aplicativo instantâneo usando o Google Play Instant, você pode iniciá-lo da seguinte maneira:

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
fonte
Eu acho que isso está errado, pelo menos Uri.parse("https://play.google.com/store/apps/details?id=. Em alguns dispositivos, ele abre o navegador da Web em vez do Play Market.
CoolMind 02/02/19
Todo o código é retirado de documentos oficiais. O link também está anexado no código de resposta descrito aqui para uma referência rápida.
Husnain Qasim 07/02/19
@CoolMind a razão disso é provavelmente porque esses dispositivos têm uma versão mais antiga do aplicativo Play Store que não possui um filtro de intenção correspondente a esse URI.
tir38 23/03
@ tir38, talvez sim. Talvez eles não tenham o Google Play Services ou não estejam autorizados, não me lembro.
CoolMind 23/03
6

Como os documentos oficiais usam em https://vez de market://, isso combina a resposta de Eric e M3-n50 com a reutilização de código (não se 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);
}

Ele tenta abrir com o aplicativo GPlay, se existir, e volta ao padrão.

serv-inc
fonte
5

Solução pronta para uso:

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

}

Com base na resposta de Eric.

Alexandr
fonte
1
Funciona para você? Ele abre a página principal do Google Play, não a página do meu aplicativo.
Violet Giraffe
4

Kotlin:

Extensão:

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
fonte
3

Se você deseja abrir a Google Play Store no seu aplicativo, use este comando diretamente:, market://details?gotohome=com.yourAppNameele abrirá as páginas da loja no Google Play.

Mostrar todos os aplicativos de um editor específico

Pesquise aplicativos que usam a consulta em seu título ou descrição

Referência: https://tricklio.com/market-details-gotohome-1/

Tahmid
fonte
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
fonte
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
fonte
2

Minha função de entenção kotlin para esse fim

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

E na sua atividade

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
fonte
2

Aqui está o código final das respostas acima que tentam abrir o aplicativo pela primeira vez usando o aplicativo Google Play Store e, especificamente, a Play Store, se falhar, iniciará a exibição de ação usando a versão da web: Créditos para @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
fonte
2

Este link abrirá o aplicativo automaticamente no mercado: // se você estiver no Android e no navegador se estiver no 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
fonte
O que você quer dizer? Você tentou minha solução? Funcionou para mim.
Nikolay Shindarov 14/03/19
Na verdade, na minha tarefa, há uma visualização na web e, na webview, tenho que carregar qualquer URL. mas, se houver um URL de playstore aberto, ele mostra o botão abrir playstore. então eu preciso abrir o aplicativo ao clicar nesse botão. será dinâmico para qualquer aplicativo, então como posso gerenciar?
HpAndro 18/03/19
Basta tentar o link #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 18/03/19
1

Eu combinei tanto Berťák e Stefano Munarini resposta para criar uma solução híbrida que trata tanto Classificar esta App e mostrar mais App cenário.

        /**
         * 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 o perfil dos editores
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • Para abrir a página do aplicativo no PlayStore
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}
Hitesh Sahu
fonte
Id sugerir dividir esse código em métodos menores. É difícil encontrar o código importante neste spaghetti :) Além disso, você está verificando para "com.android.vending" que sobre com.google.market
Aetherna
1

Povos, não se esqueça que você pode realmente obter algo mais com isso. Quero dizer, rastreamento UTM, por exemplo. 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
fonte
1

Uma versão kotlin com fallback e sintaxe atual

 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
fonte