Как открыть Google Play Store прямо из моего приложения для 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 напрямую.


Вы можете сделать это с помощью префикса market://.

  final String appPackageName = getPackageName (); //getPackageName () из объекта Context или Activitytry {startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? id =" + appPackageName)));} catch (android.content.ActivityNotFoundException anfe)  {startActivity (новое намерение (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, проверьте ответ Беркак


Многие ответы здесь предлагают использовать 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) {//вы также можете использовать BuildConfig.APPLICATION_ID String appId = context.getPackageName ();  Intent rateIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? Id =" + appId));  логическое значение marketFound = false; //находим все приложения, способные обработать наш рейтинг rateIntent final List  otherApps = context.getPackageManager () .queryIntentActivities (rateIntent, 0);  for (ResolveInfo otherApp: otherApps) {//ищем приложение Google Play if (otherApp.activityInfo.applicationInfo.packageName .equals ("com.android.vending")) {ActivityInfo otherAppActivity = otherApp.activityInfo;  ComponentName componentName = new ComponentName (otherAppActivity.applicationInfo.packageName, otherAppActivity.name); //убедитесь, что он НЕ открывается в стеке вашей активности rateIntent.addFlags (Intent. FLAG_ACTIVITY_NEW_TASK); //переродление задачи при необходимости rateIntent.addFlags (Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); //если Google Play уже был открыт в результатах поиска//это убедитесь, что он все еще переходит на страницу приложения, которую вы запрашивали rateIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); //убедитесь, что только приложению Google Play разрешено//перехватывать намерение rateIntent.setComponent (componentName);  context.startActivity (rateIntent);  marketFound = true;  перерыв;  }}//если GP отсутствует на устройстве, откройте веб-браузер 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 .


Многие ответы здесь предлагают использовать 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) {//вы также можете использовать BuildConfig.APPLICATION_ID String appId = context.getPackageName ();  Intent rateIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? Id =" + appId));  логическое значение marketFound = false; //находим все приложения, способные обработать наш рейтинг rateIntent final List  otherApps = context.getPackageManager () .queryIntentActivities (rateIntent, 0);  for (ResolveInfo otherApp: otherApps) {//ищем приложение Google Play if (otherApp.activityInfo.applicationInfo.packageName .equals ("com.android.vending")) {ActivityInfo otherAppActivity = otherApp.activityInfo;  ComponentName componentName = new ComponentName (otherAppActivity.applicationInfo.packageName, otherAppActivity. имя ); //убедитесь, что он НЕ открывается в стеке вашей активности rateIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); //переродление задачи при необходимости rateIntent.addFlags (Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); //если Google Play уже был открыт в результатах поиска//это убедитесь, что он все еще переходит на страницу приложения, которую вы запрашивали rateIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); //убедитесь, что только приложению Google Play разрешено//перехватывать намерение rateIntent.setComponent (componentName);  context.startActivity (rateIntent);  marketFound = true;  перерыв;  }}//если GP отсутствует на устройстве, откройте веб-браузер 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 .


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

С веб-сайта: https://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);  


попробуйте это

  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");//имя пакета и действиеComponentName comp =  новое имя компонента ("com.android.vending", "com.google.android.finsky.activities.LaunchUrlHandlerActivity");  launchIntent.setComponent (comp);//образец для открытия facebook applaunchIntent.setData (Uri.parse ("market://details? id = com.facebook.katana")); startActivity (launchIntent);  

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

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

С уважением.


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

  Intent launchIntent = getPackageManager (). getLaunchIntentForPackage ("com.android.  vending ");//имя пакета и активностьComponentName comp = new ComponentName (" com.android.vending "," com.google.android.finsky.activities.LaunchUrlHandlerActivity ");  launchIntent.setComponent (comp);//образец для открытия facebook applaunchIntent.setData (Uri.parse ("market://details? id = com.facebook. katana ")); startActivity (launchIntent);  

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

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

С уважением.


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

  final String my_package_name = "........."// 


Вы можете проверить, работает ли Google Play Store установлено, и в этом случае вы можете использовать протокол «market://» .

  final String  my_package_name = "........."// 

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

  попробуйте {Intent appStoreIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? Id =" + appPackageName  ));  appStoreIntent.setPackage ("com.android.vending");  startActivity (appStoreIntent);} catch (исключение android.content.ActivityNotFoundException) {startActivity (новое намерение (Intent.ACTION_VIEW, Uri.parse ("https://play.google.com/store/apps/details?id=" +  appPackageName)));}  

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


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

  попробуйте {Intent appStoreIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? Id =" + appPackageName  ));  appStoreIntent.setPackage ("com.android.vending");  startActivity (appStoreIntent);} catch (исключение android.content.ActivityNotFoundException) {startActivity (новое намерение (Intent.ACTION_VIEW, Uri.parse ("https://play.google.com/store/apps/details?id=" +  appPackageName)));}  

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


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

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


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

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

Вы можете:

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

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

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

v>

Вы можете:

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

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

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


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

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

По мере настройки intent, передайте "com.android.vending" в Intent.setPackage () , чтобы пользователи видели детали вашего приложения в Приложение «Google Play Маркет» вместо средства выбора . для 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)  

Если вы опубликовали мгновенное приложение с помощью 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");//Необязательные параметры, такие как реферер, передаются в запущенное//мгновенное приложение. Вы можете получить эти параметры  using//Activity.getIntent (). getData (). uriBuilder.appendQueryParameter ("реферер", "exampleCampaignId"); intent.setData (uriBuilder.build ()); intent.setPackage ("com.android.vending");  startActivity (intent);  

Для KOTLIN

  val uriBuilder = Uri.parse ("https://play.google.  com/store/apps/details ") .buildUpon () .appendQueryParameter (" id "," com.example.android ") .appendQueryParameter (" launch "," true ")//Необязательные параметры, такие как реферер, не используются  sed в запущенное//мгновенное приложение.  Вы можете получить эти параметры с помощью Activity.intent.data.uriBuilder.appendQueryParameter ("referrer", "exampleCampaignId") val intent = Intent (Intent.ACTION_VIEW) .apply {data = uriBuilder.build () setPackage ("com.android.  вендинг ")} startActivity (намерение)  


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

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

По мере настройки intent, передайте "com.android.vending" в Intent.setPackage () , чтобы пользователи видели детали вашего приложения в Приложение «Google Play Маркет» вместо средства выбора . для 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 (намерение)  

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

  Intent intent = new Intent (Intent.  ACTION_VIEW); Uri.Builder uriBuilder = Uri.parse ("https://play.google.com/store/apps/details") .buildUpon () .appendQuery  Parameter ("id", "com.example.android") .appendQueryParameter ("launch", "true");//Необязательные параметры, такие как реферер, передаются в запущенное//мгновенное приложение.  Вы можете получить эти параметры с помощью//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")//Необязательные параметры, такие как реферер, передаются в запущенное//мгновенное приложение.  Вы можете получить эти параметры с помощью Activity.intent.data.uriBuilder.appendQueryParameter ("referrer", "exampleCampaignId") val intent = Intent (Intent.ACTION_VIEW) .apply {data = uriBuilder.build () setPackage ("com.android.  vending ")} startActivity (intent)  

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

  Intent intent = new Intent (Intent.ACTION_VIEW) .setData (Uri.parse ("https://play.google.com/store/apps/details?id=" + getPackageName ())  ); попробуйте {startActivity (new Intent (intent) .setPackage ("com.android.vending"));} catch (исключение android.content.ActivityNotFoundException) {startActivity (intent);}  

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


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

  Intent intent = new Intent (Intent.ACTION_VIEW) .setData (Uri.parse ("https://play.google.com/store/apps/details?id  = "+ getPackageName ())); попробуйте {startActivity (new Intent (intent) .setPackage (" com.android.vending "));} catch (исключение android.content.ActivityNotFoundException) {startActivity (intent);}  

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


Котлин:

Расширение:

  fun Activity.openAppInGooglePlay () {val appId = BuildConfig.APPLICATION_IDпопробуйте {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 ")))}}  


Котлин:

Расширение:

  fun Activity.openAppInGooglePlay () {val appId = BuildConfig.APPLICATION_IDtry {this.startActivity (Intent (Intent.ACTION_VIEW, Uri.parse ("market  ://подробности? id = $ appId ")))} catch (anfe: ActivityNotFoundException) {this.startActivity (Intent (Intent.ACTION_VIEW, Uri.parse (" https://play.google.com/store/apps/ подробности? id = $ appId ")))}}  

Метод:

  fun openAppInGooglePlay (activity: Activity) {val  appId = BuildConfig.APPLICATION_ID попробуйте {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")))}}  

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

  открытый класс GoogleServicesUtils {public static void openAppInGooglePlay (контекст контекста) {final String appPackageName = context.getPackageName ();  попробуйте {context.startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? id =" + appPackageName)));  } catch (android.content.ActivityNotFoundException e) {//если на устройстве нет Google Play context.startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse ("https://play.google.com/store/apps /details? id = "+ appPackageName)));  }}}  

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


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

  открытый класс GoogleServicesUtils {public static void openAppInGooglePlay (контекст контекста) {final String appPackageName = context.getPackageName ();  попробуйте {context.startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? id =" + appPackageName)));  } catch (android.content.ActivityNotFoundException e) {//если на устройстве нет Google Play context.startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse ("https://play.google.com/store/apps /details? id = "+ appPackageName)));  }}}  

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


Kotlin

  fun openAppInPlayStore (appPackageName: String) {попробуйте {startActivity (Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? Id = $ appPackageName")  ))} catch (исключение: android.content.ActivityNotFoundException) {startActivity (Intent (Intent.ACTION_VIEW, Uri.parse ("https://play.google.com/store/apps/details?id=$appPackageName"))  )}}  


Котлин

  fun openAppInPlayStore (appPackageName: String) {попробуйте {startActivity (Intent (Intent.ACTION_VIEW, Uri. parse ("market://details? id = $ appPackageName")))} catch (исключение: android.content.ActivityNotFoundException) {startActivity (Intent (Intent.ACTION_VIEW, Uri.parse ("https://play.google.  com/store/apps/details? id = $ appPackageName ")))}}  

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

  • Интернет: http://play.google.com/store/apps/details?id=
  • Приложение: market://подробнее? id =

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

  • Интернет: http://play.google.com/store/ search? q = pub:
  • App: market://search? q = pub:

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

  • Интернет: http://play.google.com/store/search?q=
  • Приложение: market://search ? q =

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


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

  • Интернет: http://play.google.com/store/apps/details?id=
  • Приложение: market://details? id =

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

  • Интернет : http://play.google.com/store/search?q=pub:
  • Приложение: market://search? q = pub:

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

  • Интернет: http://play.google.com/store/search?q=
  • Приложение: market://search? q =

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


Вот последний код из приведенных выше ответов, который сначала пытается открыть приложение с помощью приложения магазина Google Play и, в частности, Play store, если он не удастся, он будет запустите просмотр действий, используя веб-версию: Кредиты для @Eric, @Jonathan Caballero

  public void goToPlayStore () {String playStoreMarketUrl = "market://details? id ="  ;  Строка playStoreWebUrl = "https://play.google.com/store/apps/details?id=";  Строка packageName = getActivity (). GetPackageName ();  попробуйте {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.ACTION_VIEW, Uri.parse (playStoreMarketUrl + packageName));  } startActivity (намерение);  } catch (ActivityNotFoundException e) {Intent intent = new Intent (Intent.ACTION_VIEW, Uri. синтаксический анализ (playStoreWebUrl + packageName));  startActivity (намерение);  }}  


Вот последний код из приведенных выше ответов, который сначала пытается открыть приложение с помощью приложения магазина Google Play и в частности, в магазине воспроизведения, в случае сбоя он запустит просмотр действий с использованием веб-версии: Кредиты для @Eric, @Jonathan Caballero

  public void goToPlayStore () {String playStoreMarketUrl =  "market://подробности? id =";  Строка playStoreWebUrl = "https://play.google.com/store/apps/details?id=";  Строка packageName = getActivity (). GetPackageName ();  попробуйте {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.ACTION_VIEW, Uri.parse (playStoreMarketUrl + packageName));  } startActivity (намерение);  } catch (ActivityNotFoundException e) {намерение намерения = новое намерение (намерение.ACTION_VIEW, Uri.parse (playStoreWebUrl + packageName));  startActivity (намерение);  }}  

Некоторые ответы на этот вопрос устарели.

Что сработало для меня (в 2020 году), так это явное указание на намерение пропустить средство выбора и напрямую открыть приложение Play Store по этой ссылке:

» Если вы хотите установить ссылку на свои продукты из приложения для Android, создайте объект Intent, который открывает URL-адрес. При настройке этого намерения передайте com.android.vending в Intent.setPackage (), чтобы пользователи видели сведения о вашем приложении в Google Play Магазин приложений вместо средства выбора. «

Это код Kotlin, который я использовал, чтобы направлять пользователей к просмотру приложения, содержащего имя пакета com.google.android.apps.maps в Google Воспроизвести:

  val intent = Intent (Intent.ACTION_VIEW) .apply {data = Uri.parse ("http://play.google.com/store/apps/details  ? id = com.google.android.apps.maps ") setPackage (" com.android.vending ")} startActivity (intent)  

Надеюсь, это кому-то поможет!

iv>

Некоторые ответы на этот вопрос устарели.

Что сработало для меня (в 2020 году), так это явное указание на намерение пропустить средство выбора и напрямую открыть приложение магазина воспроизведения, согласно этой ссылке:

«Если вы хотите ссылаться на свои продукты из приложения Android, создайте намерение, открывающее URL-адрес. Когда вы настраиваете это намерение, передайте com.android.vending в Intent.setPackage (), чтобы пользователи видели детали yourapp в приложении Google Play Store вместо средства выбора.. «

Это код Kotlin, который я использовал, чтобы направлять пользователей к просмотру приложения, содержащего имя пакета com.google.android.apps.maps, в Google Play:

  val intent = Intent (Intent.ACTION_VIEW) .apply {data = Uri.parse ("http://play.google.com/store/apps/details?id=com.google.  android.apps.maps ") setPackage (" com.android.vending ")} startActivity (intent)  

Надеюсь, это кому-то поможет!


  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 (новое намерение (Intent.ACTION_VIEW, Uri.parse ("https://play.google.com/store/apps/details?id=" + packageName)));}}  

iv>

  public void launchPlayStore (Context context, String  packageName) {Намерение = null;  попробуйте {намерение = новое намерение (Intent.ACTION_VIEW);  intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);  intent.setData (Uri.parse ("рынок://детали? id =" + packageName));  context.startActivity (намерение);  } catch (android.content.ActivityNotFoundException anfe) {startActivity (новое намерение (Intent.ACTION_VIEW, Uri.parse ("https://play.google.com/store/apps/details?id=" + packageName)));  }}  

Моя функция расширения 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))  


Моя функция расширения 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/ детали? id = "+ appPackageName)} startActivity (Intent (Intent. ACTION_VIEW, uri))  

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

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


Эта ссылка автоматически откроет приложение в 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  

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

 /** * Это  метод проверяет, есть ли GooglePlay  установлен или нет на устройстве и соответственно обрабатывает * Намерения для просмотра для оценки профиля приложения или издателя * * @param showPublisherProfile передает true, если вы хотите открыть страницу издателя, иначе передайте false, чтобы открыть страницу APp * @param publisherID передайте идентификатор разработчика, если вы  передал PublisherProfile true */public void openPlayStore (boolean showPublisherProfile, String publisherID) {//Обработка ошибок if (publisherID == null ||  ! publisherID.isEmpty ()) {publisherID = ""; //Записываем и продолжаем Log.w («метод openPlayStore», «publisherID недействителен»);  } Намерение openPlayStoreIntent;  логическое isGooglePlayInstalled = false;  if (showPublisherProfile) {//Открыть профиль издателя в PlayStore openPlayStoreIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://search? q = pub:" + publisherID));  } else {//Откройте это приложение в PlayStore openPlayStoreIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? id =" + getPackageName ()));  }//находим все приложения, которые могут обрабатывать openPlayStoreIntent final List  otherApps = getPackageManager () .queryIntentActivities (openPlayStoreIntent, 0);  for (ResolveInfo otherApp: otherApps) {//ищем приложение Google Play if (otherApp.activityInfo.applicationInfo.packageName.equals ("com.android.vending")) {ActivityInfo otherAppActivity = otherApp.activityInfo;  ComponentName componentName = new ComponentName (otherAppActivity.applicationInfo.packageName, otherAppActivity.name); //убедитесь, что он НЕ открывается в стеке вашей активности openPlayStoreIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); //повторное создание задачи при необходимости openPlayStoreIntent.addFlags (Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); //если Google Play уже был открыт в результатах поиска//убедитесь, что он все еще переходит на страницу приложения, которую вы запросили openPlayStoreIntent.addFlags (Intent. FLAG_ACTIVITY_CLEAR_TOP); //убедитесь, что только приложению Google Play разрешено//перехватывать намерение openPlayStoreIntent.setComponent (componentName);  startActivity (openPlayStoreIntent);  isGooglePlayInstalled = true;  перерыв;  }}//если Google Play не установлен на устройстве, откройте веб-браузер if (! isGooglePlayInstalled) {Intent webIntent;  if (showPublisherProfile) {//Открыть профиль издателя в веб-браузере webIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("http://play.google.com/store/search?q=pub:" + getPackageName ()  ));  } else {//Откройте это приложение в веб-браузере 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, "");}  


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

 /** * Этот метод проверяет, установлен ли GooglePlay на устройстве или нет, и соответственно обрабатывает  * Намерения для просмотра оценки приложения или профиля издателя * * @param showPublisherProfile передать true, если вы хотите открыть страницу издателя, иначе передать false, чтобы открыть страницу APp * @param publisherID передать Dev ID, если вы передали PublisherProfile true */public void openPlayStore (  boolean showPublisherProfile, String publisherID) {//Обработка ошибок if (publis  herID == null ||  ! publisherID.isEmpty ()) {publisherID = ""; //Записываем и продолжаем Log.w («метод openPlayStore», «publisherID недействителен»);  } Намерение openPlayStoreIntent;  логическое isGooglePlayInstalled = false;  if (showPublisherProfile) {//Открыть профиль издателя в PlayStore openPlayStoreIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://search? q = pub:" + publisherID));  } else {//Откройте это приложение в PlayStore openPlayStoreIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("market://details? id =" + getPackageName ()));  }//находим все приложения, которые могут обрабатывать openPlayStoreIntent final List  otherApps = getPackageManager () .queryIntentActivities (openPlayStoreIntent, 0);  for (ResolveInfo otherApp: otherApps) {//ищем приложение Google Play if (otherApp.activityInfo.applicationInfo.packageName.equals ("com.android.vending")) {ActivityInfo otherAppActivity = otherApp. activityInfo;  ComponentName componentName = new ComponentName (otherAppActivity.applicationInfo.packageName, otherAppActivity.name); //убедитесь, что он НЕ открывается в стеке вашей активности openPlayStoreIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); //повторное создание задачи при необходимости openPlayStoreIntent.addFlags (Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); //если Google Play уже был открыт в результатах поиска//это убедитесь, что он все еще переходит на страницу приложения, которую вы запросили openPlayStoreIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); //убедитесь, что только приложению Google Play разрешено//перехватывать намерение openPlayStoreIntent.setComponent (componentName);  startActivity (openPlayStoreIntent);  isGooglePlayInstalled = true;  перерыв;  }}//если Google Play не установлен на устройстве, откройте веб-браузер if (! isGooglePlayInstalled) {Intent webIntent;  if (showPublisherProfile) {//Открыть профиль издателя в веб-браузере webIntent = new Intent (Intent.ACTION_VIEW, Uri.parse ("http://play.google.com/store/search?q=pub:" + getPackageName ()  ));  } else {//Откройте это приложение в веб-браузере 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, "");}  

Люди, не забывайте, что вы можете получить от этого нечто большее. Я имею в виду, например, отслеживание UTM. https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

public static final String MODULE_ICON_PACK_FREE = "com.example.iconpack_free"; общедоступный  статическая конечная строка APP_STORE_URI = "market://details? id =% s & referrer = utm_source =% s & utm_medium = app & utm_campaign = plugin"; общедоступная статическая конечная строка APP_STORE_GENERIC_URI = "https://play.google.com/store/apps/details?  id =% s & referrer = utm_source =% s & utm_medium = app & utm_campaign = plugin "; попробуйте {startActivity (новое намерение (Intent.ACTION_VIEW, Uri.parse (String.format (Locale.US, APP_STORE_URI, MODULE_ICON_PACK_FREE), getPackage)  (Intent.FLAG_ACTIVITY_CLEAR_TOP));} catch (android.content.ActivityNotFoundException anfe) {startActivity (новое намерение (Intent.ACTION_VIEW, Uri.parse (String.format (Locale.US, APP_STORE_GENERIC_URI)  addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP));}  

iv>

Люди, не забывайте, что вы можете получить от этого нечто большее. Я имею в виду, например, отслеживание UTM. https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

public static final String MODULE_ICON_PACK_FREE = "com.example.iconpack_free"; общедоступный  статическая конечная строка APP_STORE_URI = "market://details? id =% s & referrer = utm_source =% s & utm_medium = app & utm_campaign = plugin"; общедоступная статическая конечная строка APP_STORE_GENERIC_URI = "https://play.google.com/store/apps/details?  id =% s & referrer = utm_source =% s & utm_medium = app & utm_campaign = plugin "; попробуйте {startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse (String.format (Locale.US, APP_STORE_URI, MODULE_ICON_PACK_FREE), getPackage)  (Intent.FLAG_ACTIVITY_CLEAR_TOP));} catch (android.content.ActivityNotFoundException anfe) {startActivity (новое намерение (Intent.ACTION_VIEW, Uri.parse (String.format (Locale.US, APP_STORE_GENERIC_URI), MODULEFREEN_Pame).  addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP));}  

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

  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 или Intent.FLAG_ACTIVITY_MULTIPLE_TASK или Intent.FLAG_ACTIVITY_NEW_TASK flags = if (Build.VERSION.SDK_INT> = 21) {flags или Intent.FLAG_ACTIVITY_NEW_TASK flags (Build.VERSION.SDK_INT> = 21) {flags или Intent.FLAG_ACTIVITY_NEW_DOCUMENT_FLAGS_ACTIVITY_NEW_DOCUMENT_flags или Intent.FLAG_ACTIVITY_NEW_DOCUMENT_flags_DOCUMENT_FLAG_ACTIVITY_NEW_DOCUMENT_flags  {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)}}  


Версия котлина с откатом и текущим синтаксисом

  fun openAppInPlayStore () {val uri = Uri.parse ("market://details? id =" + context.packageName) val goToMa  rketIntent = Intent (Intent.ACTION_VIEW, uri) var flags = Intent.FLAG_ACTIVITY_NO_HISTORY или Intent.FLAG_ACTIVITY_MULTIPLE_TASK или Intent.FLAG_ACTIVITY_NEW_TASK flags = if (Build.VERSIONflags {FACTIVITY_INDOWS) или Intent_flags_Intent_Fлаги.  FLAG_ACTIVITY_CLEAR_TASK} goToMarketIntent.addFlags (flags) попробуйте {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)}}  

Оцените статью
techsly.ru
Добавить комментарий