“为此应用评分” – 在手机上的Google Play商店应用中链接

我想在Android应用中添加一个“评价此应用” – 链接,以在其手机上打开用户的Google Play商店应用中的应用列表。

  1. 我需要编写什么样的代码才能在电话上的Google Play商店应用中打开market://http://链接?
  2. 你把代码放在哪里?
  3. 有没有人有这样的示例实现?
  4. 你是否必须指定market://http://链接将被放置的屏幕,哪个是最好用的 – market://http://

我使用以下代码从我的应用程序打开Play商店:

  Uri uri = Uri.parse("market://details?id=" + context.getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); // To count with Play market backstack, After pressing back button, // to taken back to our application, we need to add following flags to intent. goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); try { startActivity(goToMarket); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName()))); } 

这将启动您的应用程序页面已经打开的Play商店。 用户可以在那里评分。

这是一个工作和最新的代码:)

 /* * Start with rating the app * Determine if the Play Store is installed on the device * * */ public void rateApp() { try { Intent rateIntent = rateIntentForUrl("market://details"); startActivity(rateIntent); } catch (ActivityNotFoundException e) { Intent rateIntent = rateIntentForUrl("https://play.google.com/store/apps/details"); startActivity(rateIntent); } } private Intent rateIntentForUrl(String url) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format("%s?id=%s", url, getPackageName()))); int flags = Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_MULTIPLE_TASK; if (Build.VERSION.SDK_INT >= 21) { flags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT; } else { //noinspection deprecation flags |= Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET; } intent.addFlags(flags); return intent; } 

把代码放在你想要调用它的Activity
当用户点击一个button来评价应用程序,只需调用rateApp()函数。

这是如果您在Google Play商店和Amazon Appstore中发布您的应用程序。 我也处理用户(特别是中国)没有app store和浏览器的情况。

 public void goToMyApp(boolean googlePlay) {//true if Google Play, false if Amazone Store try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse((googlePlay ? "market://details?id=" : "amzn://apps/android?p=") +getPackageName()))); } catch (ActivityNotFoundException e1) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse((googlePlay ? "http://play.google.com/store/apps/details?id=" : "http://www.amazon.com/gp/mas/dl/android?p=") +getPackageName()))); } catch (ActivityNotFoundException e2) { Toast.makeText(this, "You don't have any app that can open this link", Toast.LENGTH_SHORT).show(); } } } 

我总是使用这个代码:

 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=PackageName"))); 

您可以随时从PackageManager类调用getInstalledPackages()并检查以确保市场类已安装。 你也可以使用queryIntentActivities()来确保你构造的Intent能够被某些东西处理,即使它不是市场应用。 这可能是最好的做法,因为它是最灵活和最健壮的。

你可以检查市场的应用程序是否在那里

 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("market://search?q=foo")); PackageManager pm = getPackageManager(); List<ResolveInfo> list = pm.queryIntentActivities(intent, 0); 

如果列表中至less有一个条目,则市场在那里。

您可以使用以下方式在您的应用程序页面上启动Android电子市场,它有点更加自动化:

 Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse("market://details?id=" + getPackageName())); startActivity(i); 

如果你想在你的模拟器上进行testing,你可能没有安装市场:查看这些链接了解更多细节:

如何在Google Android模拟器中启用Android电子市场

在Android模拟器上安装Google Play

我使用这种方法来让用户评价我的应用程序:

 public static void showRateDialog(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle("Rate application") .setMessage("Please, rate the app at PlayMarket") .setPositiveButton("RATE", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (context != null) { String link = "market://details?id="; try { // play market available context.getPackageManager() .getPackageInfo("com.android.vending", 0); // not available } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); // should use browser link = "https://play.google.com/store/apps/details?id="; } // starts external action context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(link + context.getPackageName()))); } } }) .setNegativeButton("CANCEL", null); builder.show(); } 

另一种可能适合你的方法是Linkify。 如果我有一个要求用户评价应用程序的TextView,我可以链接文本中的几个单词,以便突出显示,当用户触摸它们时,Play商店将打开并准备好进行审阅:

 class playTransformFilter implements TransformFilter { public String transformUrl(Matcher match, String url) { return "market://details?id=com.qwertyasd.yourapp"; } } class playMatchFilter implements MatchFilter { public boolean acceptMatch(CharSequence s, int start, int end) { return true; } } text1 = (TextView) findViewById(R.id.text1); text1.setText("Please rate it."); final Pattern playMatcher = Pattern.compile("rate it"); Linkify.addLinks(text1, playMatcher, "", new playMatchFilter(), new playTransformFilter()); 

关于具有基于getPackageName()策略的实现的所有答案的一点是使用BuildConfig.APPLICATION_ID可能更直接,并且如果使用相同的代码库构build具有不同app ID的多个应用(例如,a白色标签产品)。

你应该用这个简单的代码来评价你的应用在你的活动中。

 try { Uri uri = Uri.parse("market://details?id=" + getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); startActivity(goToMarket); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName()))); } 

你可以使用这个,它适用于我

 public static void showRateDialogForRate(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle("Rate application") .setMessage("Please, rate the app at PlayMarket") .setPositiveButton("RATE", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (context != null) { //////////////////////////////// Uri uri = Uri.parse("market://details?id=" + context.getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); // To count with Play market backstack, After pressing back button, // to taken back to our application, we need to add following flags to intent. goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); try { context.startActivity(goToMarket); } catch (ActivityNotFoundException e) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName()))); } } } }) .setNegativeButton("CANCEL", null); builder.show(); }