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



Я открыл магазин 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). Мне нужно открыть приложение в playstore напрямую.

1644   18  

18 ответов:

вы можете сделать это с помощью 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 ответ

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

некоторые сторонние приложения могут использовать свои собственные фильтры намерений с "market://" схема определена, таким образом, они могут обрабатывать поставляемый Uri вместо Google Play (я испытал эту ситуацию, например, с приложением SnapPea). Вопрос в том, " как открыть магазин Google Play?"поэтому я предполагаю, что вы не хотите открывать никаких других приложение. Обратите также внимание, что, например, рейтинг приложения имеет значение только в приложении 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 делает.

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

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

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

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

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

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

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

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

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

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

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

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

попробуй такое

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);

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

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

С уважением.

вы можете проверить, если Google Play Store приложение и, если это так, вы можете использовать "рынок://" протокол.

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

использовать market://

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

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

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. Если игровой магазин не установлен, то Exception будет пойман.

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

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

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

вы также можете попробовать подход, описанный в принятом ответе на этот вопрос: не удается определить, установлен ли Google play store или нет на устройстве Android

готовое к использованию решение:

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

}

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

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

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

поиск приложений, которые используют запрос на его название или описание

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

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

моя функция Kotlin entension для этой цели

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

вот окончательный код из ответов выше, который сначала пытается открыть приложение с помощью приложения Google play store и, в частности, 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);
        }
    }

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

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

эта Ссылка автоматически откроет приложение на рынке:// если вы находитесь на Android и в браузере, если вы находитесь на ПК.

https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1

Котлин

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

Если вы хотите открыть Play Market для поиска приложений (например, "pdf"), используйте это:

private void openPlayMarket(String query) {
    try {
        // If Play Services are installed.
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=" + query)));
    } catch (ActivityNotFoundException e) {
        // Open in a browser.
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/search?q=" + query)));
    }
}

Comments

    Ничего не найдено.