De nombreuses réponses suggèrent ici Uri.parse("market://details?id=" + appPackageName))
d'ouvrir Google Play, mais je pense que c'est insuffisant en fait:
Certaines applications tierces peuvent utiliser ses propres filtres d'intention avec un "market://"
schéma défini , elles peuvent donc traiter l'URI fourni au lieu de Google Play (j'ai rencontré cette situation avec l'application egSnapPea). La question est "Comment ouvrir le Google Play Store?", Je suppose donc que vous ne voulez ouvrir aucune autre application. Veuillez également noter que, par exemple, la classification des applications n'est pertinente que dans l'application GP Store, etc.
Pour ouvrir Google Play ET UNIQUEMENT Google Play, j'utilise cette méthode:
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);
}
}
Le fait est que lorsque plus d'applications à côté de Google Play peuvent ouvrir notre intention, la boîte de dialogue de sélection d'application est ignorée et l'application GP est démarrée directement.
MISE À JOUR:
Parfois, il semble qu'il ouvre uniquement l'application GP, sans ouvrir le profil de l'application. Comme TrevorWiley l'a suggéré dans son commentaire, Intent.FLAG_ACTIVITY_CLEAR_TOP
pourrait résoudre le problème. (Je ne l'ai pas encore testé moi-même ...)
Voir cette réponse pour comprendre ce qui se Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
passe.