Muchas respuestas aquí sugieren usar Uri.parse("market://details?id=" + appPackageName))
para abrir Google Play, pero creo que, de hecho, es insuficiente :
Algunas aplicaciones de terceros pueden usar sus propios filtros de intención con el "market://"
esquema definido , por lo tanto, pueden procesar Uri suministrado en lugar de Google Play (Experimenté esta situación con, por ejemplo, la aplicación SnapPea). La pregunta es "¿Cómo abrir Google Play Store?", Así que supongo que no desea abrir ninguna otra aplicación. Tenga en cuenta también que, por ejemplo, la calificación de la aplicación solo es relevante en la aplicación GP Store, etc.
Para abrir Google Play Y SOLO Google Play utilizo este método:
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);
}
}
El punto es que cuando más aplicaciones además de Google Play pueden abrir nuestra intención, se omite el diálogo de selección de aplicaciones y la aplicación GP se inicia directamente.
ACTUALIZACIÓN: a
veces parece que solo abre la aplicación GP, sin abrir el perfil de la aplicación. Como TrevorWiley sugirió en su comentario, Intent.FLAG_ACTIVITY_CLEAR_TOP
podría solucionar el problema. (No lo probé yo mismo todavía ...)
Vea esta respuesta para entender lo que Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
hace.