відкрити посилання google play store у мобільній версії android


88

У моєму останньому додатку є посилання на інші мої програми, і я відкриваю їх таким чином.

Uri uri = Uri.parse("url");
Intent intent = new Intent (Intent.ACTION_VIEW, uri); 
startActivity(intent);

цей код відкриває браузерну версію google play store.

При спробі відкрити з телефону телефон запитує, чи хочу я скористатися браузером або google play, а якщо вибрати другий, відкриється мобільна версія google play store.

Чи можете ви сказати мені, як це може статися відразу? Я маю на увазі не запитувати мене, а безпосередньо відкрити мобільну версію google play, ту, яку я бачу, відкриваючи її безпосередньо з телефону.


1
Я бажаю, щоб другий до останнього абзацу був для мене правдивим. Використовуючи посилання http, знайдене тут: developer.android.com/distribute/googleplay/promote/… , користувач не пропонує користувачеві вибрати програму чи браузер. Це завжди передбачає браузер. На жаль, я також не можу користуватися market://протоколом. Хтось ще бачив таку поведінку?
SilithCrowe

Відповіді:


265

Ви захочете використовувати вказаний marketпротокол:

final String appPackageName = "com.example"; // Can also use getPackageName(), as below
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));

Майте на увазі, це призведе до збою на будь-якому пристрої, на якому не встановлено 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("http://play.google.com/store/apps/details?id=" + appPackageName)));
}

Під час використання getPackageName()від Contextабо його підкласу для узгодженості (спасибі @cprcrack !). Більше про Market Intents ви можете знайти тут: посилання .


Відкриття в браузері наступного не відкриває Google Play: market: // details? Id = pandora
IgorGanapolsky

1
Ідентифікатор - це назва пакета, а не назва програми. Спробуйте market://details?id=com.PandoraTV(припустимо, що це програма, яку ви хочете).
Ерік

9
Ця відповідь стосується використання market://префікса з вашої власної програми, а не з веб-сайту через браузер. Я можу засвідчити його функціональність (у версіях 2.3, 3.x, 4.0, 4.1 та 4.2), і він працює із стандартним браузером Chrome Beta 25 та Chrome 18.
Ерік

1
Так, Chrome - це додаток, але це вимагає від його розробників [Google] використання цього коду, а не від людей [вас], які створюють веб-сайти. На даний момент цей код допомагає людям, які структурують посилання спеціально зі своїх додатків.
Ерік

2
Ви можете використовувати getPackageName()для автоматичного отримання ідентифікатора програми.
cprcrack

6

Нижче наведений код може допомогти вам відобразити посилання на додаток Google Play Sore у мобільній версії.

Для посилання на заявку:

Uri uri = Uri.parse("market://details?id=" + mContext.getPackageName());
Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);

  try {
        startActivity(myAppLinkToMarket);

      } catch (ActivityNotFoundException e) {

        //the device hasn't installed Google Play
        Toast.makeText(Setting.this, "You don't have Google Play installed", Toast.LENGTH_LONG).show();
              }

Посилання для розробника:

Uri uri = Uri.parse("market://search?q=pub:" + YourDeveloperName);
Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);

            try {

                startActivity(myAppLinkToMarket);

            } catch (ActivityNotFoundException e) {

                //the device hasn't installed Google Play
                Toast.makeText(Settings.this, "You don't have Google Play installed", Toast.LENGTH_LONG).show();

            } 

3

Ви можете використовувати бібліотеку Android Intents для відкриття сторінки своєї програми в Google Play таким чином:

Intent intent = IntentUtils.openPlayStore(getApplicationContext());
startActivity(intent);

2
Зверніть увагу, що відповіді лише на посилання не рекомендуються, відповіді SO повинні бути кінцевою точкою пошуку рішення (порівняно з черговою зупинкою посилань, які з часом старіють). Будь ласка, додайте сюди окремий конспект, зберігаючи посилання як посилання.
kleopatra

4
Було б корисно включити застереження про те, що це ваша бібліотека, і функція реалізована майже так само, як прийнята відповідь.
ta.speot.is


1

Ви можете перевірити, чи встановлено додаток Google Play Store , і, якщо це так, ви можете скористатися протоколом "market: //" .

final String my_package_name = "........."  // <- HERE YOUR PACKAGE NAME!!
String url = "";

try {
    //Check whether Google Play store is installed or not:
    this.getPackageManager().getPackageInfo("com.android.vending", 0);

    url = "market://details?id=" + my_package_name;
} catch ( final Exception e ) {
    url = "https://play.google.com/store/apps/details?id=" + my_package_name;
}


//Open the app page in Google Play store:
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(intent);

0

Відкрити сторінку програми в Google Play:

Intent intent = new Intent(Intent.ACTION_VIEW,
                Uri.parse("market://details?id=" + context.getPackageName()));
startActivity(intent);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.