Как открыть магазин Google Play непосредственно из моего приложения для Android?
Я открыл магазин google play, используя следующий код
Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=my packagename "));
startActivity(i);.
но он показывает мне полное представление действий, чтобы выбрать опцию (браузер / play store). Мне нужно открыть приложение в playstore напрямую.
18 ответов:
вы можете сделать это с помощью
market://префикс.final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); } catch (android.content.ActivityNotFoundException anfe) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); }мы использовать
try/catchблок здесь, потому чтоExceptionбудет брошен, если Play Store не установлен на целевом устройстве.Примечание: любое приложение может зарегистрироваться как способный обрабатывать
market://details?id=<appId>Uri, если вы хотите специально ориентироваться на Google Play, проверьте Berťák ответ
многие ответы здесь предлагают использовать
Uri.parse("market://details?id=" + appPackageName))чтобы открыть Google Play, но я думаю, что это недостаточно по сути:некоторые сторонние приложения могут использовать свои собственные фильтры намерений с
"market://"схема определена, таким образом, они могут обрабатывать поставляемый Uri вместо Google Play (я испытал эту ситуацию, например, с приложением SnapPea). Вопрос в том, " как открыть магазин Google Play?"поэтому я предполагаю, что вы не хотите открывать никаких других приложение. Обратите также внимание, что, например, рейтинг приложения имеет значение только в приложении GP Store и т. д...чтобы открыть Google Play и только Google Play я использую этот метод:
public static void openAppRating(Context context) { // you can also use BuildConfig.APPLICATION_ID String appId = context.getPackageName(); Intent rateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appId)); boolean marketFound = false; // find all applications able to handle our rateIntent final List<ResolveInfo> otherApps = context.getPackageManager() .queryIntentActivities(rateIntent, 0); for (ResolveInfo otherApp: otherApps) { // look for Google Play application if (otherApp.activityInfo.applicationInfo.packageName .equals("com.android.vending")) { ActivityInfo otherAppActivity = otherApp.activityInfo; ComponentName componentName = new ComponentName( otherAppActivity.applicationInfo.packageName, otherAppActivity.name ); // make sure it does NOT open in the stack of your activity rateIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // task reparenting if needed rateIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); // if the Google Play was already open in a search result // this make sure it still go to the app page you requested rateIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this make sure only the Google Play app is allowed to // intercept the intent rateIntent.setComponent(componentName); context.startActivity(rateIntent); marketFound = true; break; } } // if GP not present on device, open web browser if (!marketFound) { Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id="+appId)); context.startActivity(webIntent); } }дело в том, что когда больше приложений рядом с Google Play может открыть наше намерение, диалог выбора приложения пропускается и приложение GP запускается напрямую.
обновление: Иногда кажется, что он открывает только приложение GP, не открывая профиль приложения. Как Треворвили предложил в своем комментарии
Intent.FLAG_ACTIVITY_CLEAR_TOPможет решить проблему. (Я сам еще не проверял...)посмотреть ответ для понимания того, что
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDделает.
перейдите по официальной ссылке разработчика Android в качестве учебника шаг за шагом см. и получил код для вашего пакета приложений из play store, если он существует или приложения play store не существует, а затем откройте приложение из веб-браузера.
официальная ссылка для разработчиков Android
http://developer.android.com/distribute/tools/promote/linking.html
ссылка на страницу приложения
С веб-сайта:
http://play.google.com/store/apps/details?id=<package_name>из приложения для Android:
market://details?id=<package_name>ссылка на список продуктов
веб-сайт:
http://play.google.com/store/search?q=pub:<publisher_name>из приложения для Android:
market://search?q=pub:<publisher_name>ссылка на результат поиска
веб-сайт:
http://play.google.com/store/search?q=<search_query>&c=appsиз приложения для Android:
market://search?q=<seach_query>&c=apps
попробуй такое
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("market://details?id=com.example.android")); startActivity(intent);
все вышеперечисленные ответы откройте Google Play в новом представлении того же приложения, если вы действительно хотите открыть Google Play (или любое другое приложение) независимо:
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.android.vending"); // package name and activity ComponentName comp = new ComponentName("com.android.vending", "com.google.android.finsky.activities.LaunchUrlHandlerActivity"); launchIntent.setComponent(comp); // sample to open facebook app launchIntent.setData(Uri.parse("market://details?id=com.facebook.katana")); startActivity(launchIntent);важная часть заключается в том, что на самом деле открывает google play или любое другое приложение независимо.
большинство из того, что я видел, использует подход других ответов, и это было не то, что мне нужно, надеюсь, это поможет кому-то.
С уважением.
вы можете проверить, если Google Play Store приложение и, если это так, вы можете использовать "рынок://" протокол.
final String my_package_name = "........." // <- HERE YOUR PACKAGE NAME!! String url = ""; try { //Check whether Google Play store is installed or not: this.getPackageManager().getPackageInfo("com.android.vending", 0); url = "market://details?id=" + my_package_name; } catch ( final Exception e ) { url = "https://play.google.com/store/apps/details?id=" + my_package_name; } //Open the app page in Google Play store: final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); startActivity(intent);
использовать market://
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + my_packagename));
В то время как ответ Эрика является правильным и код Beráák также работает. Я думаю, что это сочетает в себе более элегантно.
try { Intent appStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)); appStoreIntent.setPackage("com.android.vending"); startActivity(appStoreIntent); } catch (android.content.ActivityNotFoundException exception) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); }С помощью
setPackage, вы заставляете устройство использовать Play Store. Если игровой магазин не установлен, тоExceptionбудет пойман.
вы можете сделать:
final Uri marketUri = Uri.parse("market://details?id=" + packageName); startActivity(new Intent(Intent.ACTION_VIEW, marketUri));получить ссылку здесь:
вы также можете попробовать подход, описанный в принятом ответе на этот вопрос: не удается определить, установлен ли Google play store или нет на устройстве Android
готовое к использованию решение:
public class GoogleServicesUtils { public static void openAppInGooglePlay(Context context) { final String appPackageName = context.getPackageName(); try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); } catch (android.content.ActivityNotFoundException e) { // if there is no Google Play on device context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); } } }на основе ответа Эрика.
Если вы хотите открыть Google Play store из вашего приложения, то используйте эту команду directy:
market://details?gotohome=com.yourAppName, Он откроет страницы вашего приложения в Google Play store.
- Web:http://play.google.com/store/apps/details?id=
- приложение: рынок: / / детали?идентификатор=
показать все приложения конкретного издателя
- Web:http://play.google.com/store/search?q=pub:
- приложения: рынок://поиск?вопрос=паб:
поиск приложений, которые используют запрос на его название или описание
- Web:http://play.google.com/store/search?q=
- приложения: рынок://поиск?q=
public void launchPlayStore(Context context, String packageName) { Intent intent = null; try { intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse("market://details?id=" + packageName)); context.startActivity(intent); } catch (android.content.ActivityNotFoundException anfe) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName))); } }
моя функция Kotlin entension для этой цели
fun Context.canPerformIntent(intent: Intent): Boolean { val mgr = this.packageManager val list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) return list.size > 0 }и в ваших действиях
val uri = if (canPerformIntent(Intent(Intent.ACTION_VIEW, Uri.parse("market://")))) { Uri.parse("market://details?id=" + appPackageName) } else { Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName) } startActivity(Intent(Intent.ACTION_VIEW, uri))
вот окончательный код из ответов выше, который сначала пытается открыть приложение с помощью приложения Google play store и, в частности, play store, если это не удастся, он запустит представление действий с помощью веб-версии: Кредиты @Eric, @Jonathan Caballero
public void goToPlayStore() { String playStoreMarketUrl = "market://details?id="; String playStoreWebUrl = "https://play.google.com/store/apps/details?id="; String packageName = getActivity().getPackageName(); try { Intent intent = getActivity() .getPackageManager() .getLaunchIntentForPackage("com.android.vending"); if (intent != null) { ComponentName androidComponent = new ComponentName("com.android.vending", "com.google.android.finsky.activities.LaunchUrlHandlerActivity"); intent.setComponent(androidComponent); intent.setData(Uri.parse(playStoreMarketUrl + packageName)); } else { intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreMarketUrl + packageName)); } startActivity(intent); } catch (ActivityNotFoundException e) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreWebUrl + packageName)); startActivity(intent); } }
Я объединил обе Berťák и Стефано Мунарини ответ на создание гибридного решения, которое обрабатывает как оценить это приложение и Показать Больше Приложений сценарий.
/** * This method checks if GooglePlay is installed or not on the device and accordingly handle * Intents to view for rate App or Publisher's Profile * * @param showPublisherProfile pass true if you want to open Publisher Page else pass false to open APp page * @param publisherID pass Dev ID if you have passed PublisherProfile true */ public void openPlayStore(boolean showPublisherProfile, String publisherID) { //Error Handling if (publisherID == null || !publisherID.isEmpty()) { publisherID = ""; //Log and continue Log.w("openPlayStore Method", "publisherID is invalid"); } Intent openPlayStoreIntent; boolean isGooglePlayInstalled = false; if (showPublisherProfile) { //Open Publishers Profile on PlayStore openPlayStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pub:" + publisherID)); } else { //Open this App on PlayStore openPlayStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())); } // find all applications who can handle openPlayStoreIntent final List<ResolveInfo> otherApps = getPackageManager() .queryIntentActivities(openPlayStoreIntent, 0); for (ResolveInfo otherApp : otherApps) { // look for Google Play application if (otherApp.activityInfo.applicationInfo.packageName.equals("com.android.vending")) { ActivityInfo otherAppActivity = otherApp.activityInfo; ComponentName componentName = new ComponentName( otherAppActivity.applicationInfo.packageName, otherAppActivity.name ); // make sure it does NOT open in the stack of your activity openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // task reparenting if needed openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); // if the Google Play was already open in a search result // this make sure it still go to the app page you requested openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this make sure only the Google Play app is allowed to // intercept the intent openPlayStoreIntent.setComponent(componentName); startActivity(openPlayStoreIntent); isGooglePlayInstalled = true; break; } } // if Google Play is not Installed on the device, open web browser if (!isGooglePlayInstalled) { Intent webIntent; if (showPublisherProfile) { //Open Publishers Profile on web browser webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/search?q=pub:" + getPackageName())); } else { //Open this App on web browser webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName())); } startActivity(webIntent); } }использование
- Чтобы Открыть Профиль Издателя
@OnClick(R.id.ll_more_apps) public void showMoreApps() { openPlayStore(true, "Hitesh Sahu"); }
- чтобы открыть страницу приложения на PlayStore
@OnClick(R.id.ll_rate_this_app) public void openAppInPlayStore() { openPlayStore(false, ""); }
эта Ссылка автоматически откроет приложение на рынке:// если вы находитесь на Android и в браузере, если вы находитесь на ПК.
https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Котлин
fun openAppInPlayStore(appPackageName: String) { try { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appPackageName"))) } catch (exception: android.content.ActivityNotFoundException) { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName"))) } }
Если вы хотите открыть Play Market для поиска приложений (например, "pdf"), используйте это:
private void openPlayMarket(String query) { try { // If Play Services are installed. startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=" + query))); } catch (ActivityNotFoundException e) { // Open in a browser. startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/search?q=" + query))); } }
Comments