Viele Antworten hier schlagen vor, Folgendes zu verwenden Uri.parse("market://details?id=" + appPackageName))
um Google Play zu öffnen, aber ich denke, es ist unzureichend in der Tat:
Einige Anwendungen von Drittanbietern können ihre eigenen Intent-Filter mit "market://"
Schema definiert So können sie die gelieferte Uri anstelle von Google Play verarbeiten (ich habe diese Situation z. B. mit der Anwendung SnapPea erlebt). Die Frage lautet "Wie öffne ich den Google Play Store?", daher gehe ich davon aus, dass Sie keine andere Anwendung öffnen möchten. Bitte beachten Sie auch, dass z.B. die App-Bewertung nur in der GP-Store-App relevant ist usw.
Um Google Play UND NUR Google Play zu öffnen, verwende ich diese Methode:
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);
}
}
Der Punkt ist, dass, wenn mehr Anwendungen als Google Play unsere Absicht öffnen können, der App-Auswahl-Dialog übersprungen und die GP-App direkt gestartet wird.
UPDATE: Manchmal scheint es, dass nur die GP-App geöffnet wird, ohne das Profil der App zu öffnen. Wie TrevorWiley in seinem Kommentar vorschlug, Intent.FLAG_ACTIVITY_CLEAR_TOP
könnte das Problem beheben. (Ich habe es selbst noch nicht getestet...)
Siehe diese Antwort um zu verstehen, was Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
tut.