651

次のコードを使用して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 ストアでアプリケーションを直接開く必要があります。

4

24 に答える 24

1618

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 {
    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$packageName")))
} catch (e: ActivityNotFoundException) {
    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$packageName")))
}

Play ストアがターゲット デバイスにインストールされていない場合は がスローされるtry/catchため、ここではブロックを使用します。Exception

: どのアプリでも Uri を処理できるものとして登録できmarket://details?id=<appId>ます。具体的に Google Play をターゲットにしたい場合は、Berťákの回答を確認してください。

于 2012-08-01T05:34:22.717 に答える
181

ここでの多くの回答は、Google Playを開くために使用することを提案していますが、実際 Uri.parse("market://details?id=" + appPackageName)) には不十分だと思います:

"market://"一部のサードパーティ アプリケーションは、スキームが定義された独自のインテント フィルターを使用できるため、Google Play の代わりに提供された Uri を処理できます (egSnapPea アプリケーションでこの状況を経験しました)。質問は「Google Play ストアの開き方」ですので、他のアプリケーションを開きたくないのだと思います。また、たとえば、アプリの評価は GP ストア アプリなどにのみ関連することに注意してください。

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 アプリのみを開くように見えることがあります。TrevorWiley がコメントで示唆したようにIntent.FLAG_ACTIVITY_CLEAR_TOP、問題を解決できます。(まだ自分でテストしていません...)

何が機能するかを理解するには、この回答を参照してくださいIntent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

于 2015-01-22T14:15:53.597 に答える
26

これを試して

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);
于 2012-08-01T05:36:53.683 に答える
23

実際に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 または他のアプリを個別に開くことです。

私が見たもののほとんどは、他の回答のアプローチを使用しており、これが誰かに役立つことを願って必要なものではありませんでした。

よろしく。

于 2014-07-29T03:10:53.560 に答える
15

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);
于 2014-04-10T10:18:08.657 に答える
12

market:// を使用

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + my_packagename));
于 2012-08-01T05:35:07.910 に答える
7

できるよ:

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

ここで参照を取得します:

この質問の受け入れられた回答で説明されているアプローチを試すこともできます: Google Play ストアが Android デバイスにインストールされているかどうかを判断できません

于 2012-08-01T05:35:48.500 に答える
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"、ユーザーが chooser ではなくGoogle Play ストア アプリIntent.setPackage()でアプリの詳細を確認できるようにします。コトリン用

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

コトリンの場合

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)
于 2018-10-17T20:31:20.137 に答える
6

すぐに使えるソリューション:

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

}

エリックの答えに基づいています。

于 2016-07-11T20:11:22.073 に答える
5

market://Android の場合はこのリンクから、PC の場合はブラウザでアプリが自動的に開きます。

https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
于 2018-09-10T07:28:01.627 に答える