android - play評論 - play商店更新2018




如何直接從我的Android應用程序打開Google Play商店? (10)

我已經使用follwing代碼打開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);.

但它顯示了一個完整的操作視圖來選擇選項(瀏覽器/播放存儲)。 我需要直接在Playstore中打開應用程序。


如果您確實想單獨打開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);

重要的部分是實際上獨立打開谷歌播放或任何其他應用程序。

我所看到的大部分使用其他答案的方法,並不是我所需要的,希望這有助於某人。

問候。


這裡有許多答案建議使用 Uri.parse("market://details?id=" + appPackageName)) 來打開Google Play,但我認為它實際上不夠用:

某些第三方應用程序可以使用自己的意圖過濾器和定義的"market://"方案 ,因此他們可以處理提供的Uri而不是Google Play(我在egSnapPea應用程序中遇到過這種情況)。 問題是“如何打開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應用程序,而不打開應用程序的配置文件。 正如TrevorWiley在他的評論中所建議的那樣, Intent.FLAG_ACTIVITY_CLEAR_TOP可以解決這個問題。 (我沒有自己測試過......)

了解Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED作用,請參閱此答案 。


你可以使用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塊,因為如果Play Store沒有安裝在目標設備上,則會拋出異常。

注意 :任何應用程序都可以註冊為能夠處理market://details?id=<appId> Uri,如果您想專門定位Google Play,請檢查Berťák答案



即用型解決方案:

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的回答。


嘗試這個

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

如果您想從應用中打開Google Play商店,請使用此命令directy: market://details?gotohome=com.yourAppName ,它會打開您應用的Google Play商店頁面。

顯示特定發布商的所有應用

在標題或說明中搜索使用查詢的應用程序

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


您可以檢查是否安裝了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);

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

雖然埃里克的回答是正確的,伯加拉克的代碼也可以工作。 我認為這更加優雅地結合在一起。

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





google-play