Molte risposte qui suggeriscono di utilizzare Uri.parse("market://details?id=" + appPackageName))
per aprire Google Play, ma penso che in realtà sia insufficiente :
Alcune applicazioni di terze parti possono utilizzare i propri filtri di intenti con lo "market://"
schema definito , quindi possono elaborare Uri fornito anziché Google Play (ho riscontrato questa situazione con l'applicazione ad esempio SnapPea). La domanda è "Come aprire Google Play Store?", Quindi presumo che tu non voglia aprire altre applicazioni. Nota anche che, ad esempio, la valutazione delle app è rilevante solo nell'app GP Store, ecc ...
Per aprire Google Play E SOLO Google Play, utilizzo questo metodo:
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);
}
}
Il punto è che quando più applicazioni accanto a Google Play possono aprire il nostro intento, la finestra di dialogo di selezione delle app viene saltata e l'app GP viene avviata direttamente.
AGGIORNAMENTO: a
volte sembra che apra solo l'app GP, senza aprire il profilo dell'app. Come ha suggerito TrevorWiley nel suo commento, Intent.FLAG_ACTIVITY_CLEAR_TOP
potrebbe risolvere il problema. (Non l'ho ancora provato da solo ...)
Vedi questa risposta per capire cosa Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
fa.