Як відкрити магазин Google Play безпосередньо з програми 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 безпосередньо.


Відповіді:


1436

Це можна зробити за допомогою 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>Урі, якщо ви хочете націлити Google Play перевірити Berťák відповідь


53
якщо ви хочете переспрямувати всі програми розробника, які використовуєте, market://search?q=pub:"+devNameіhttp://play.google.com/store/search?q=pub:"+devName
— Стефано Мунаріні,

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, не відкриваючи профіль додатка. Як запропонував TrevorWiley у своєму коментарі, це Intent.FLAG_ACTIVITY_CLEAR_TOPможе вирішити проблему. (Я його ще не перевіряв ...)

Дивіться цю відповідь, щоб зрозуміти, що Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDробить.


4
Незважаючи на те, що це добре, це також здається ненадійним із поточною версією Google Play, якщо ви ввійдете на іншу сторінку додатків у Google Play, а потім запустіть цей код, він просто відкриє Google Play, але не перейде до вашої програми.
— золтиш

2
@zoltish, я додав у прапори Intent.FLAG_ACTIVITY_CLEAR_TOP, і це, здається, вирішує проблему
— TrevorWiley

Я використав Intent.FLAG_ACTIVITY_CLEAR_TOP | Намір.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, але не працює. немає жодної інстанції магазину Play
— Praveen Kumar Verma,

3
Що станеться, якщо ви rateIntent.setPackage("com.android.vending")впевнені, що додаток PlayStore впорається з цим наміром, а не всім цим кодом?
— dum4ll3

3
@ dum4ll3 Я думаю, ви можете, але цей код також неявно перевіряє, чи встановлено додаток Google Play. Якщо ви цього не перевірите, вам потрібно зловити на ActivityNotFound
— Daniele Segato

81

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

Офіційне посилання для Android Developer

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


Використання ринку: // префікс більше не рекомендується (перевірте посилання, яке ви опублікували)
— Грег Енніс

@GregEnnis, де ви бачите, що ринок: // префікс більше не рекомендується?
— loki

@loki Я думаю, справа в тому, що вона вже не перерахована як пропозиція. Якщо ви шукаєте на цій сторінці слово, marketви не знайдете жодного рішення. Я думаю, що новий спосіб - це звільнити більш загальний розробник намірів.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);

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 або будь-який інший додаток незалежно.

Більшість того, що я бачив, використовує підхід інших відповідей, і це було не те, що мені потрібно, сподіваюся, це допомагає комусь.

З повагою


Що таке 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запит буде спіймано.


Офіційні документи використовують https://play.google.com/store/apps/details?id=замість market:Як прийти? developer.android.com/distribute/marketing-tools/… Все ще вичерпна і коротка відповідь.
— серв-інк

Я не впевнений, але думаю, що це ярлик, який Android перекладає як " play.google.com/store/apps ". Напевно, ви можете також використовувати "market: //", крім винятку.
— M3-n50


7

Ви можете зробити:

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

отримати довідку тут :

Ви також можете спробувати підхід, описаний у прийнятій відповіді на це запитання: Неможливо визначити, встановлений чи ігровий магазин Google на пристрої Android


Я вже намагався з цим кодом, це також показує можливість вибору браузера / магазину гри, оскільки на моєму пристрої встановлено обидва додатки (google play store / browser).
— Раджеш Кумар

Про те, як самостійно відкрити 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, ви можете запустити його наступним чином:

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, якщо вона існує і повертається до замовчування.


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

3

Якщо ви хочете відкрити магазин Google Play у своєму додатку, скористайтеся цією командою прямо:, market://details?gotohome=com.yourAppNameвона відкриє сторінки вашого магазину Google Play.

Показати всі програми певного видавця

Шукайте програми, які використовують Запит у назві чи описі

Довідка: https://tricklio.com/market-details-gotohome-1/


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

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

Для цього моя функція розширення котліну

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, а конкретно ігровий магазин, якщо це не вдасться, він запустить перегляд дій за допомогою веб-версії: Кредити до @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);
        }
    }

2

Це посилання автоматично відкриє додаток на ринку: // якщо ви перебуваєте на 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-адреса магазину, вона показує кнопку відкритого магазину. тому мені потрібно відкрити додаток, натиснувши цю кнопку. це буде динамічно для будь-якої програми, тож як я можу керувати?
— 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", що
— говорити

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

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)
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.