Nhiều câu trả lời ở đây đề nghị sử dụng Uri.parse("market://details?id=" + appPackageName))
để mở Google Play, nhưng thực tế tôi nghĩ nó không đủ :
Một số ứng dụng của bên thứ ba có thể sử dụng các bộ lọc ý định của riêng mình với "market://"
sơ đồ được xác định , do đó chúng có thể xử lý Uri được cung cấp thay vì Google Play (Tôi đã gặp tình huống này với ứng dụng egSnapPea). Câu hỏi là "Làm thế nào để mở Cửa hàng Google Play?", Vì vậy tôi cho rằng, bạn không muốn mở bất kỳ ứng dụng nào khác. Cũng xin lưu ý rằng, ví dụ: xếp hạng ứng dụng chỉ có liên quan trong ứng dụng GP Store, v.v ...
Để mở Google Play VÀ CHỈ Google Play, tôi sử dụng phương pháp này:
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);
}
}
Vấn đề là khi nhiều ứng dụng bên cạnh Google Play có thể mở ra ý định của chúng tôi, hộp thoại chọn ứng dụng sẽ bị bỏ qua và ứng dụng GP được khởi động trực tiếp.
CẬP NHẬT:
Đôi khi dường như nó chỉ mở ứng dụng GP mà không mở hồ sơ của ứng dụng. Như TrevorWiley đề xuất trong bình luận của mình, Intent.FLAG_ACTIVITY_CLEAR_TOP
có thể khắc phục vấn đề. (Tôi chưa tự kiểm tra nó ...)
Xem câu trả lời này để hiểu những gì Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
không.