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

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

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

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

Вы можете сделать это, используя префикс 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= Uri, если вы хотите специально настроить Google Play, проверьте ответ Berťák

Многие ответы здесь предлагают использовать 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 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 начнется напрямую.

UPDATE: Иногда кажется, что он открывает приложение GP только, не открывая профиль приложения. Как предложил TrevorWiley в своем комментарии, Intent.FLAG_ACTIVITY_CLEAR_TOP может решить проблему. (Я еще не проверял его …)

См. Этот ответ, чтобы понять, что делает Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED .

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

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

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

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

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

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

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

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

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

Связь с результатами поиска

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

Из приложения для Android: market://search?q=&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 или любое другое приложение независимо.

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

С уважением.

Вы можете проверить, установлено ли приложение 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); 

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

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

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

 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 будет обнаружен.

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

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

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

Вы также можете попробовать подход, описанный в принятом ответе на этот вопрос: не удается определить, установлен ли магазин Google Play или нет на устройстве 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 из своего приложения, используйте эту команду directy: market://details?gotohome=com.yourAppName , он откроет страницы вашего магазина в Google Play.

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

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

Ссылка: 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))); } } 

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

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

Я объединил и Berťák, и Stefano Munarini ответ на создание гибридного решения, которое обрабатывает сценарий « Оценить это приложение и показать больше» .

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

Если вы хотите открыть 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))); } } 
  • Не удалось войти в систему. Проверьте подключение к сети и повторите попытку.
  • запросить в Google Play магазине версию приложения?
  • Как ограничить приложение Android конкретным устройством?
  • Получение данных из Android Play Store
  • versionCode vs versionName в Android Manifest
  • Android - Google Play как вкладки
  • Как запустить Google Play в режиме «Отправить отзыв» на Android?
  • Эта версия приложения не настроена для выставления счетов через Google Play
  • открытая ссылка google play store в мобильной версии Android
  • Невозможно получить информацию о подписке из API разработчика Google Play для Android
  • Предупреждение Google Play и OpenSSL
  • Давайте будем гением компьютера.