Многие ответы здесь предлагают использовать Uri.parse("market://details?id=" + appPackageName))
для открытия Google Play, но на самом деле этого недостаточно :
Некоторые сторонние приложения могут использовать свои собственные фильтры намерений с "market://"
определенной схемой , поэтому они могут обрабатывать предоставленный Uri вместо Google Play (я сталкивался с такой ситуацией в приложении egSnapPea). Вопрос «Как открыть Google Play Store?», Поэтому я предполагаю, что вы не хотите открывать какие-либо другие приложения. Также обратите внимание, что, например, рейтинг приложения относится только к приложению GP Store и т. Д.
Чтобы открыть Google Play И ТОЛЬКО Google Play, я использую этот метод:
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);
}
}
Дело в том, что когда наши приложения могут открыть больше приложений, кроме Google Play, диалоговое окно выбора приложений пропускается, и приложение GP запускается напрямую.
ОБНОВЛЕНИЕ:
Иногда кажется, что он открывает только приложение GP, не открывая профиль приложения. Как Тревор Уайли предложил в своем комментарии,Intent.FLAG_ACTIVITY_CLEAR_TOP
может решить проблему. (Я сам еще не проверял ...)
Посмотрите этот ответ для понимания того, что Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
делает.