Я открыл магазин 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
Вы можете:
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)
Надеюсь, это кому-то поможет!
Некоторые ответы на этот вопрос устарели.
Что сработало для меня (в 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)));}}
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));}
Люди, не забывайте, что вы можете получить от этого нечто большее. Я имею в виду, например, отслеживание 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)}}