Как открыть Google Play Store прямо из моего приложения для Android?

569

Я открыл магазин Google Play, используя следующий код

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

Но он показывает мне полный вид действия как выбрать опцию (браузер / магазин воспроизведения). Мне нужно открыть приложение в Play Store напрямую.

Раджеш Кумар
источник
Отвечает ли это на ваш вопрос? Ссылка «Оцените это приложение» в приложении Google Play на телефоне
Йоав Фюрштайн

Ответы:

1437

Вы можете сделать это, используя market://префикс .

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

Мы используем try/catchблок здесь, потому что Exceptionбудет брошено, если Play Store не установлен на целевом устройстве.

ПРИМЕЧАНИЕ : любое приложение может зарегистрироваться как способное обрабатывать market://details?id=<appId>Uri, если вы хотите специально настроить Google Play, проверьте ответ Berťák

Эрик
источник
53
если вы хотите перенаправить на все приложения разработчика, используйте market://search?q=pub:"+devNameиhttp://play.google.com/store/search?q=pub:"+devName
Stefano Munarini
4
Это решение не работает, если какое-то приложение использует фильтр намерений с определенной схемой "market: //". Смотрите мой ответ, как открыть Google Play И ТОЛЬКО приложение Google Play (или веб-браузер, если GP отсутствует). :-)
Berťák
18
Для проектов, использующих систему сборки Gradle, appPackageNameэто на самом деле BuildConfig.APPLICATION_ID. Нет Context/ Activityзависимостей, снижая риск утечек памяти.
Кристиан Гарсия
3
Вам все еще нужен контекст для запуска намерения. Context.startActivity ()
wblaschko
2
Это решение предполагает, что есть намерение открыть веб-браузер. Это не всегда так (как на Android TV), поэтому будьте осторожны. Вы можете использовать intent.resolveActivity (getPackageManager ()), чтобы определить, что делать.
Coda
161

Многие ответы здесь предлагают использовать Uri.parse("market://details?id=" + appPackageName)) для открытия Google Play, но на самом деле этого недостаточно :

Некоторые сторонние приложения могут использовать свои собственные фильтры намерений с "market://"определенной схемой , поэтому они могут обрабатывать предоставленный Uri вместо Google Play (я сталкивался с такой ситуацией в приложении egSnapPea). Вопрос «Как открыть Google Play Store?», Поэтому я предполагаю, что вы не хотите открывать какие-либо другие приложения. Также обратите внимание, что, например, рейтинг приложения относится только к приложению GP Store и т. Д.

Чтобы открыть Google Play И ТОЛЬКО Google Play, я использую этот метод:

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

Дело в том, что когда наши приложения могут открыть больше приложений, кроме Google Play, диалоговое окно выбора приложений пропускается, и приложение GP запускается напрямую.

ОБНОВЛЕНИЕ: Иногда кажется, что он открывает только приложение GP, не открывая профиль приложения. Как Тревор Уайли предложил в своем комментарии,Intent.FLAG_ACTIVITY_CLEAR_TOP может решить проблему. (Я сам еще не проверял ...)

Посмотрите этот ответ для понимания того, что Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDделает.

Berťák
источник
4
Несмотря на то, что это хорошо, в текущей сборке Google Play это также кажется ненадежным, если вы заходите на страницу других приложений в Google Play, а затем запускаете этот код, он просто открывает Google Play, но не переходит в ваше приложение.
Золтиш
2
@zoltish, я добавил Intent.FLAG_ACTIVITY_CLEAR_TOP к флагам, и это, кажется,
решило
Я использовал Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, но не работает. нет нового экземпляра, открытого в магазине Play
Praveen Kumar Verma
3
Что произойдет, если вы rateIntent.setPackage("com.android.vending")будете уверены, что приложение PlayStore выполнит эту задачу вместо всего этого кода?
dum4ll3
3
@ dum4ll3 Думаю, вы можете, но этот код также неявно проверяет, установлено ли приложение Google Play. Если вы не проверите это, вам нужно поймать ActivityNotFound
Даниэле Сегато
81

Перейдите по официальной ссылке Android Developer как учебное пособие, шаг за шагом посмотрите и получите код для вашего пакета приложений из магазина Play Store, если он существует, или приложений Play Store не существует, затем откройте приложение из веб-браузера.

Официальная ссылка для разработчиков Android

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

Ссылка на страницу приложения

С веб-сайта: https://play.google.com/store/apps/details?id=<package_name>

Из приложения для Android: market://details?id=<package_name>

Ссылка на список товаров

С веб-сайта: https://play.google.com/store/search?q=pub:<publisher_name>

Из приложения для Android: market://search?q=pub:<publisher_name>

Ссылка на результат поиска

С веб-сайта: https://play.google.com/store/search?q=<search_query>&c=apps

Из приложения для Android: market://search?q=<seach_query>&c=apps

Наджиб Ахмед Путавала
источник
Использование префикса market: // больше не рекомендуется (проверьте ссылку, которую вы разместили)
Грег Эннис,
@GregEnnis, где вы видите этот market: // префикс больше не рекомендуется?
локи
@loki Я думаю, дело в том, что он больше не указан в качестве предложения. Если вы ищете на этой странице слово, marketвы не найдете никакого решения. Я думаю, что новый способ состоит в том, чтобы запустить более общее намерение developer.android.com/distribute/marketing-tools/… . Более поздние версии приложения Play Store, вероятно, имеют фильтр намерений для этого URIhttps://play.google.com/store/apps/details?id=com.example.android
tir38
25

попробуй это

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);
Youddh
источник
1
Чтобы узнать, как открыть Google Play независимо (не встроено в новый вид в том же приложении), пожалуйста, проверьте мой ответ.
code4jhon
21

Все приведенные выше ответы открывают Google Play в новом представлении того же приложения, если вы действительно хотите открыть Google Play (или любое другое приложение) независимо:

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

Важной частью является то, что на самом деле открывает Google Play или любое другое приложение независимо.

Большая часть того, что я видел, использует подход других ответов, и это было не то, что мне нужно, надеюсь, это кому-нибудь поможет.

С уважением.

code4jhon
источник
Что такое this.cordova? Где объявления переменных? Где callbackобъявлено и определено?
Эрик
это часть плагина Cordova, я не думаю, что это на самом деле актуально ... вам просто нужен экземпляр PackageManager и начать работу регулярно, но это плагин cordova github.com/lampaa, который я переписал здесь github.com/code4jhon/org.apache.cordova.startapp
code4jhon
4
Я просто хочу сказать, что этот код не является чем-то, что люди могут просто перенести в свое собственное приложение для использования. Обрезка жира и оставление только основного метода было бы полезно для будущих читателей.
Эрик
Да, я понимаю ... сейчас я использую гибридные приложения. Не могу действительно протестировать полностью нативный код. Но я думаю, что идея есть. Если у меня будет шанс, я добавлю точные нативные строки.
code4jhon
надеюсь, это сделает @eric
code4jhon
14

Вы можете проверить, установлено ли приложение Google Play Store , и, если это так, вы можете использовать протокол "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);
Паоло Ровелли
источник
1
Чтобы узнать, как открыть Google Play независимо (не встроено в новый вид в том же приложении), пожалуйста, проверьте мой ответ.
code4jhon
12

В то время как ответ Эрика правильный, и код Берняка тоже работает. Я думаю, что это сочетает в себе более элегантно.

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

Используя setPackage, вы заставляете устройство использовать Play Store. Если не установлен Play Store, Exceptionон будет пойман.

M3-n50
источник
Официальные документы используют https://play.google.com/store/apps/details?id=вместо market:Каким образом? developer.android.com/distribute/marketing-tools/… Все еще полный и краткий ответ.
серв-вкл
Я не уверен, но я думаю, что это ярлык, который Android переводит как « play.google.com/store/apps ». Возможно, вы также можете использовать «market: //» в исключении.
M3-
11

использовать рынок: //

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + my_packagename));
Йоханнес Штелин
источник
7

Ты можешь сделать:

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

получить ссылку здесь :

Вы также можете попробовать подход, описанный в принятом ответе на этот вопрос: невозможно определить, установлен ли магазин Google Play на устройстве Android или нет.

almalkawi
источник
Я уже пытался с этим кодом, это также показывает возможность выбора браузера / магазина воспроизведения, потому что на моем устройстве установлены оба приложения (Google Play Store / браузер).
Раджеш Кумар
Чтобы узнать, как открыть Google Play независимо (не встроено в новый вид в том же приложении), пожалуйста, проверьте мой ответ.
code4jhon
7

Очень поздно на вечеринке Официальные документы здесь. И код описан

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

Когда вы настроите это намерение, перейдите "com.android.vending"к нему, Intent.setPackage()чтобы пользователи могли видеть детали вашего приложения в приложении Google Play Store, а не в окне выбора . для КОТЛИН

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)

Если вы опубликовали мгновенное приложение с помощью Google Play Instant, вы можете запустить его следующим образом:

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

Для КОТЛИНА

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)
Хуснайн Касим
источник
Я думаю, это неправильно, по крайней мере Uri.parse("https://play.google.com/store/apps/details?id=. На некоторых устройствах вместо Play Market открывается веб-браузер.
CoolMind
Весь код взят из официальных документов. Ссылка также прилагается в коде ответа, который описан здесь для краткого ознакомления.
Хуснайн Касим
@CoolMind причина этого, вероятно, в том, что эти устройства имеют старую версию приложения Play Store, в которой нет фильтра намерений, соответствующего этому URI.
tir38
@ tir38, может и так. Может быть, они не имеют сервисов Google Play или не авторизованы в них, я не помню.
CoolMind
6

Поскольку официальные документы используют https://вместо этого market://, это объединяет ответ Эрика и M3-n50 с повторным использованием кода (не повторяйте себя):

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

Он пытается открыть приложение GPlay, если оно существует, и возвращается к значению по умолчанию.

Serv-вкл
источник
5

Готовое решение:

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

}

На основании ответа Эрика.

Александр
источник
1
Работает ли это для вас? Он открывает главную страницу Google Play, а не страницу моего приложения.
Фиолетовый Жираф
4

Котлин:

Расширение:

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

Метод:

    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
источник
3

Если вы хотите открыть магазин Google Play из своего приложения, то используйте эту команду сразу: market://details?gotohome=com.yourAppNameоткроются страницы вашего приложения в магазине Google Play.

Показать все приложения определенного издателя

Поиск приложений, использующих запрос в заголовке или описании

Ссылка: https://tricklio.com/market-details-gotohome-1/

Tahmid
источник
3

Котлин

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
источник
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)));
        }
    }
Шарат Кумар
источник
2

Моя функция энтузиазма kotlin для этой цели

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

И в твоей деятельности

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))
Арпан Саркар
источник
2

Вот заключительный код из приведенных выше ответов, который сначала пытается открыть приложение с помощью приложения Google Play Store и, в частности, Play Store, в случае сбоя он запускает представление действия с помощью веб-версии: Credits to @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
источник
2

Эта ссылка автоматически откроет приложение в market: // если вы работаете на Android и в браузере, если вы на ПК.

https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Николай Шиндаров
источник
Что вы имеете в виду? Вы пробовали мое решение? Это сработало для меня.
Николай Шиндаров
На самом деле в моей задаче есть веб-просмотр, а в веб-просмотре я должен загрузить любой URL. но в этом случае, если есть открытый любой URL-адрес PlayStore, он показывает кнопку открыть PlayStore. поэтому мне нужно открыть приложение по нажатию этой кнопки. это будет динамичным для любого приложения, так как я могу управлять?
hpAndro
Просто попробуйте ссылкуhttps://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Николай Шиндаров
1

Я объединил ответ Берляка и Стефано Мунарини на создание гибридного решения, которое обрабатывает сценарии « Оцените это приложение» и « Показать больше приложений» .

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

Применение

  • Открыть профиль издателя
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • Открыть страницу приложения в PlayStore
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}
Хите саху
источник
Я бы предложил разделить этот код на более мелкие методы. Трудно найти важный код в этих спагетти :) Кроме того, вы проверяете "com.android.vending", что насчет com.google.market
Aetherna
1

Народы, не забывайте, что вы могли бы получить что-то большее от этого. Я имею в виду отслеживание UTM например. 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
источник
1

Котлинская версия с резервным и текущим синтаксисом

 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
источник