Wiele odpowiedzi tutaj sugeruje użycie Uri.parse("market://details?id=" + appPackageName))
do otwarcia Google Play, ale myślę, że w rzeczywistości jest to niewystarczające :
Niektóre aplikacje innych firm mogą używać własnych filtrów zamiarów ze "market://"
zdefiniowanym schematem , dzięki czemu mogą przetwarzać dostarczone Uri zamiast Google Play (doświadczyłem takiej sytuacji z aplikacją np. SnapPea). Pytanie brzmi „Jak otworzyć sklep Google Play?”, Więc zakładam, że nie chcesz otwierać żadnej innej aplikacji. Należy również pamiętać, że np. Ocena aplikacji dotyczy tylko aplikacji GP Store itp.
Aby otworzyć Google Play i TYLKO Google Play, używam tej metody:
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);
}
}
Chodzi o to, że gdy więcej aplikacji poza Google Play może otworzyć naszą intencję, okno wyboru aplikacji jest pomijane, a aplikacja GP jest uruchamiana bezpośrednio.
AKTUALIZACJA:
Czasami wydaje się, że otwiera tylko aplikację GP, bez otwierania profilu aplikacji. Jak sugerował TrevorWiley w swoim komentarzu, Intent.FLAG_ACTIVITY_CLEAR_TOP
problem mógł rozwiązać. (Sam jeszcze tego nie testowałem ...)
Zobacz tę odpowiedź, aby zrozumieć, co Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
robi.