Viele Antworten hier schlagen vor, Uri.parse("market://details?id=" + appPackageName))
Google Play zu öffnen, aber ich denke, es ist in der Tat unzureichend :
Einige Anwendungen von Drittanbietern können eigene Intent-Filter mit "market://"
definiertem Schema verwenden , sodass sie das bereitgestellte Uri anstelle von Google Play verarbeiten können (ich habe diese Situation mit der Anwendung egSnapPea 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 zB die App-Bewertung nur in der GP Store App usw. relevant ist.
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 neben Google Play unsere Absicht öffnen können, der App-Auswahldialog ü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
konnte das Problem behoben werden . (Ich habe es selbst noch nicht getestet ...)
In dieser Antwort erfahren Sie, was Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
funktioniert.