открыть ссылку магазина Google Play в мобильной версии Android


88

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

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

этот код открывает браузерную версию магазина Google Play.

При попытке открыть с телефона телефон запрашивает, хочу ли я использовать браузер или Google Play, и если я выберу второй, он откроет мобильную версию магазина Google Play.

Подскажите, как это может случиться сразу? Я имею в виду не спрашивать меня, а напрямую открывать мобильную версию 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)));

Имейте в виду, что это приведет к сбою на любом устройстве, на котором не установлен Маркет (например, эмулятор). Следовательно, я бы предложил что-то вроде:

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()from Contextили его подкласса для согласованности (спасибо @cprcrack !). Подробнее о рыночных намерениях можно узнать здесь: ссылка .


При открытии в браузере Google Play не открывается: market: // details? Id = pandora
Игорь Ганапольский

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 01

6

Приведенный ниже код может помочь вам отобразить ссылку на приложение Google Play в мобильной версии.

Для ссылки на приложение:

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 09


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.