如何直接从我的Android应用程序打开Goog​​le Play商店?


569

我已使用以下代码打开了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商店中打开应用程序。


Answers:


1436

您可以使用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商店,则会抛出。

注意:任何应用都可以注册为具有处理market://details?id=<appId>Uri的能力,如果您想专门针对Google Play,请查看Berťák答案


53
如果您想重定向到所有开发人员的应用使用market://search?q=pub:"+devName以及http://play.google.com/store/search?q=pub:"+devName
Stefano Munarini,2013年

4
如果某些应用程序使用定义了“ market://”方案的意图过滤器,则此解决方案将不起作用。请参阅我的答案,了解如何打开Goog​​le Play且仅打开Goog​​le Play应用程序(如果没有GP则打开Web浏览器)。:-)
贝托克

18
对于使用Gradle构建系统的项目appPackageName,实际上是BuildConfig.APPLICATION_ID。否Context/ Activity依赖关系,减少内存泄漏的风险。
ChristianGarcía2015年

3
您仍然需要上下文来启动意图。Context.startActivity()
wblaschko 2015年

2
该解决方案假定有打开Web浏览器的意图。这并不总是正确的(例如在Android TV上),因此请谨慎。您可能要使用intent.resolveActivity(getPackageManager())确定要做什么。
科达

161

建议使用许多答案 Uri.parse("market://details?id=" + appPackageName)) 来打开Goog​​le Play,但实际上我认为这是不够的:

某些第三方应用程序可以使用"market://"定义了scheme的自己的意图过滤器,因此它们可以处理提供的Uri而不是Google Play(我在egSnapPea应用程序中遇到这种情况)。问题是“如何打开Goog​​le Play商店?”,因此我假设您不想打开任何其他应用程序。另请注意,例如,应用程序评级仅与GP Store应用程序等相关。

要打开Goog​​le 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应用程序,而没有打开该应用程序的配置文件。正如TrevorWiley在评论中所建议的那样,Intent.FLAG_ACTIVITY_CLEAR_TOP可以解决此问题。(我自己还没有测试过……)

请参阅此答案以了解Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED功能。


4
虽然这很好,但对于当前的Google Play构建似乎也不可靠,但是,如果您在Google Play上进入另一个应用页面,然后触发此代码,它将仅打开Goog​​le Play,但不会转到您的应用。
zoltish

2
@zoltish,我已将Intent.FLAG_ACTIVITY_CLEAR_TOP添加到标志中,这似乎可以解决问题
TrevorWiley

我用过Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,但不起作用。没有任何新的实例Play商店的开放
普利文库马尔维尔马

3
如果您rateIntent.setPackage("com.android.vending")过去确定PlayStore应用能够处理此意图,而不是处理所有这些代码,会发生什么?
dum4ll3

3
@ dum4ll3我想可以,但是此代码还隐式检查是否已安装Google Play应用。如果您不选中它,则需要赶上ActivityNotFound
Daniele Segato 16/12/23

81

进入Android开发者官方链接,按教程逐步进行操作,查看并从Play商店获取应用程序包的代码(如果存在)或Play商店应用程序不存在,然后从Web浏览器打开应用程序。

Android Developer官方链接

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

链接到应用程序页面

从网站: https://play.google.com/store/apps/details?id=<package_name>

在Android应用中: market://details?id=<package_name>

链接到产品列表

从网站: https://play.google.com/store/search?q=pub:<publisher_name>

在Android应用中: market://search?q=pub:<publisher_name>

链接到搜索结果

从网站: https://play.google.com/store/search?q=<search_query>&c=apps

在Android应用中: market://search?q=<seach_query>&c=apps


不再建议使用market://前缀(请检查发布的链接)
Greg Ennis,

@GregEnnis,您不再建议使用market://前缀了吗?
loki

@loki我想重点是,它不再列为建议。如果在该页面上搜索单词market,将找不到任何解决方案。我认为新方法是解雇更通用的意图developer.android.com/distribute/marketing-tools/…。Play商店应用的最新版本可能为此URI提供了一个意图过滤器https://play.google.com/store/apps/details?id=com.example.android
tir38,

25

尝试这个

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);

1
有关如何独立打开Goog​​le Play(不在同一应用程序的新视图中嵌入)的信息,请检查我的答案。
code4jhon 2014年

21

如果您确实想独立打开Goog​​le Play(或任何其他应用),以上所有答案均会在同一应用的新视图中打开Goog​​le 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);

重要的是实际上是独立打开Goog​​le Play或任何其他应用。

我所看到的大部分内容都使用了其他答案的方法,而这并不是我所需要的,希望这会对某人有所帮助。

问候。


什么this.cordova啊 变量声明在哪里?在哪里callback声明和定义?
埃里克

这是Cordova插件的一部分,我认为这实际上不相关……您只需要PackageManager的一个实例并以常规方式启动活动,但这是我重写的github.com/lampaa的cordova插件。这里github.com/code4jhon/org.apache.cordova.startapp
code4jhon

4
我的意思是,这段代码并不是人们可以简单地移植到自己的应用程序中使用的东西。减少赘肉而只保留核心方法将对将来的读者有用。
埃里克

是的,我了解...目前,我正在使用混合应用程序。不能真正测试完全本机代码。但我认为这个想法就在那里。如果有机会,我将添加确切的本机行。
code4jhon 2014年

希望这会使其成为@eric
code4jhon

14

您可以检查是否已安装Google Play商店应用,如果是这种情况,则可以使用“ 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);

1
有关如何独立打开Goog​​le Play(不在同一应用程序的新视图中嵌入)的信息,请检查我的答案。
code4jhon 2014年

12

尽管埃里克(Eric)的答案是正确的,贝拉克(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商店。如果未安装Play商店,Exception则会被捕获。


官方文档使用https://play.google.com/store/apps/details?id=而不是market:怎么来的?developer.android.com/distribute/marketing-tools/…仍然是一个全面而简短的答案。
serv-inc

我不确定,但是我认为这是Android翻译成“ play.google.com/store/apps ” 的快捷方式。您也可以在例外中使用“ market://”。
M3-n50

11

使用市场://

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

7

你可以做:

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

在这里获取参考

您也可以尝试接受此问题的答案中所述的方法: 无法确定是否在Android设备上安装了Google Play商店


我已经尝试过使用此代码,这也显示了选择浏览器/ Play商店的选项,因为我的设备已安装了两个应用程序(Google Play商店/浏览器)。
拉杰什·库玛

有关如何独立打开Goog​​le Play(不在同一应用程序的新视图中嵌入)的信息,请检查我的答案。
code4jhon 2014年

7

派对晚了,官方文档在这里。和描述的代码是

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

当你配置此意图,传递"com.android.vending"Intent.setPackage()让用户看到你的应用程序的详细信息,谷歌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");

// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using
// Activity.getIntent().getData().
uriBuilder.appendQueryParameter("referrer", "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")

// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using Activity.intent.data.
uriBuilder.appendQueryParameter("referrer", "exampleCampaignId")

val intent = Intent(Intent.ACTION_VIEW).apply {
    data = uriBuilder.build()
    setPackage("com.android.vending")
}
startActivity(intent)

我认为,至少这是错误的Uri.parse("https://play.google.com/store/apps/details?id=。在某些设备上,它会打开网络浏览器,而不是Play Market。
CoolMind

所有代码均取自官方文档。链接也附在答案代码中,此处作了快速参考。
侯赛因·卡西姆

@CoolMind的原因可能是因为这些设备具有旧版的Play商店应用,但没有匹配该URI的意图过滤器。
tir38

@ tir38,也许是这样。我可能不记得他们可能没有Google Play服务或未获得其中的授权。
CoolMind

6

由于官方文档使用https://代替market://,因此将Eric和M3-n50的答案与代码重用结合在一起(不要重复自己):

Intent intent = new Intent(Intent.ACTION_VIEW)
    .setData(Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
try {
    startActivity(new Intent(intent)
                  .setPackage("com.android.vending"));
} catch (android.content.ActivityNotFoundException exception) {
    startActivity(intent);
}

如果存在,它将尝试使用GPlay应用打开,并恢复为默认状态。


5

即用型解决方案:

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

}

基于Eric的答案。


1
对你起作用吗?它会打开Goog​​le Play主页,而不是我的应用页面。
紫罗兰色长颈鹿

4

科特林:

延期:

fun Activity.openAppInGooglePlay(){

val appId = BuildConfig.APPLICATION_ID
try {
    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")
                )
            )
        }
    }

3

如果要从应用程序打开Goog​​le Play商店,请直接使用此命令:market://details?gotohome=com.yourAppName,它将打开您应用程序的Google Play商店页面。

显示特定发布者的所有应用

搜索使用标题或说明中的“查询”的应用

参考:https//tricklio.com/market-details-gotohome-1/


3

科特林

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")))
    }
}

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

2

我的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))

2

这是上面答案中的最终代码,它们首先尝试使用Google Play商店应用(尤其是Play商店)打开应用,如果失败,它将使用网络版本启动操作视图:致谢@ 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);
        }
    }

2

如果您使用的是Android,则此链接将在market://中自动打开该应用程序;如果您使用的是PC,则该链接将在浏览器中自动打开该应用程序。

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

你什么意思?您尝试过我的解决方案吗?它为我工作。
Nikolay Shindarov

实际上,在我的任务中,有一个Web视图,并且在Web视图中,我必须加载任何URL。但是如果打开了任何playstore网址,就会显示打开playstore按钮。因此,我需要点击该按钮打开应用。它对于任何应用程序都是动态的,那么我该如何管理?
hpAndro

只需尝试链接https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Nikolay Shindarov

1

我将BerťákStefano Munarini的答案结合起来,创建了一个混合解决方案,该解决方案可以处理“ 对此应用程序评分”和“ 显示更多应用程序”方案。

        /**
         * 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, "");
}

id建议将此代码分成较小的方法。这是很难找到重要的代码在这个意大利面条:)另外,你还要核对,对于 “com.android.vending”怎么样com.google.market
Aetherna

1

人民,不要忘记您实际上可以从中得到更多。我的意思是UTM跟踪。https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

public static final String MODULE_ICON_PACK_FREE = "com.example.iconpack_free";
public static final String APP_STORE_URI =
        "market://details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";
public static final String APP_STORE_GENERIC_URI =
        "https://play.google.com/store/apps/details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";

try {
    startActivity(new Intent(
        Intent.ACTION_VIEW,
        Uri.parse(String.format(Locale.US,
            APP_STORE_URI,
            MODULE_ICON_PACK_FREE,
            getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
} catch (android.content.ActivityNotFoundException anfe) {
    startActivity(new Intent(
        Intent.ACTION_VIEW,
        Uri.parse(String.format(Locale.US,
            APP_STORE_GENERIC_URI,
            MODULE_ICON_PACK_FREE,
            getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}

1

具有回退和当前语法的Kotlin版本

 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 or Intent.FLAG_ACTIVITY_MULTIPLE_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
    flags = if (Build.VERSION.SDK_INT >= 21) {
        flags or Intent.FLAG_ACTIVITY_NEW_DOCUMENT
    } else {
        flags or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }

    goToMarketIntent.addFlags(flags)

    try {
        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)
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.