使用应用程序在市场上对其进行评分

20

我目前正在开发一个Android应用程序,我想给用户一些功能来评价当前的应用程序。 在应用程序上将有一个按钮,点击它将询问用户是否要评价该应用程序?如果是,将会进入设备上的市场应用程序以评价该应用程序 (市场应该显示这个应用程序)。否则,它将打开浏览器,加载市场并显示此应用程序。 有人使用过这种功能吗?请提供一些帮助。

谢谢。


3
这回答解决了你的问题吗?在手机上的Google Play商店应用程序中,"给这个应用评分"的链接是什么意思? - Yoav Feuerstein
4个回答

47

我经常使用这样的一种方法:

private void launchMarket() {
    Uri uri = Uri.parse("market://details?id=" + getPackageName());
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    try {
        startActivity(goToMarket);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, R.string.couldnt_launch_market, Toast.LENGTH_LONG).show();
    }
}

1
@Cristian---感谢您的快速回复.. 只有一个问题--在getPackageName()的位置,我应该提供我的应用程序包,对吗?另外,我认为我需要检测设备是否安装了市场应用程序? 通常设备必须安装它,但如果用户删除了它怎么办? 那么如何检查市场应用程序是否存在? - Sandip Jadhav
1
http://developer.android.com/reference/android/content/Context.html#getPackageName%28%29 不需要,它会为您获取包名。如果没有安装市场应用程序,则会抛出异常并显示一个toast。 - Rob
如果应用被用户删除,它就无法下载市场应用了……有任何可能性吗?@Cristian - Erum
我认为这是不可能的。此外,只有高级用户才会删除市场应用程序,如果他们不想要它就让它存在。 - Cristian

3
public class AppRater {
private final static String APP_TITLE = "App Name";// App Name
private final static String APP_PNAME = "com.example.name";// Package Name

private final static int DAYS_UNTIL_PROMPT = 3;//Min number of days
private final static int LAUNCHES_UNTIL_PROMPT = 3;//Min number of launches

public static void app_launched(Context mContext) {
    SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
    if (prefs.getBoolean("dontshowagain", false)) { return ; }

    SharedPreferences.Editor editor = prefs.edit();

    // Increment launch counter
    long launch_count = prefs.getLong("launch_count", 0) + 1;
    editor.putLong("launch_count", launch_count);

    // Get date of first launch
    Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0);
    if (date_firstLaunch == 0) {
        date_firstLaunch = System.currentTimeMillis();
        editor.putLong("date_firstlaunch", date_firstLaunch);
    }

    // Wait at least n days before opening
    if (launch_count >= LAUNCHES_UNTIL_PROMPT) {
        if (System.currentTimeMillis() >= date_firstLaunch + 
                (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
            showRateDialog(mContext, editor);
        }
    }

    editor.commit();
}   

public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) {
    final Dialog dialog = new Dialog(mContext);
    dialog.setTitle("Rate " + APP_TITLE);

    LinearLayout ll = new LinearLayout(mContext);
    ll.setOrientation(LinearLayout.VERTICAL);

    TextView tv = new TextView(mContext);
    tv.setText("If you enjoy using " + APP_TITLE + ", please take a moment to rate it. Thanks for your support!");
    tv.setWidth(240);
    tv.setPadding(4, 0, 4, 10);
    ll.addView(tv);

    Button b1 = new Button(mContext);
    b1.setText("Rate " + APP_TITLE);
    b1.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME)));
            dialog.dismiss();
        }
    });        
    ll.addView(b1);

    Button b2 = new Button(mContext);
    b2.setText("Remind me later");
    b2.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            dialog.dismiss();
        }
    });
    ll.addView(b2);

    Button b3 = new Button(mContext);
    b3.setText("No, thanks");
    b3.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (editor != null) {
                editor.putBoolean("dontshowagain", true);
                editor.commit();
            }
            dialog.dismiss();
        }
    });
    ll.addView(b3);

    dialog.setContentView(ll);        
    dialog.show();        
}}

现在像这样将类集成到您的活动中->
AppRater.app_launched(this);

如果用户只是访问我们的应用程序而没有评分,该如何处理? - H Raval

1
这里有一个简单的解决方案:

最终的字符串应用程序包名称为:"com.name.app";

private void launchMyMarket() {
    Uri uri = Uri.parse("market://details?id=" + getPackageName());
    Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);
    try {
        startActivity(myAppLinkToMarket);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, " unable to find source market app! try again", Toast.LENGTH_LONG).show();
    }
}

1
这里的答案如果您的手机上安装了多个应用市场,将无法直接进入Play商店。相反,它会显示一个选择器对话框。
要直接打开Play商店,请使用以下方法:
private fun rateUs() {
    val uri = Uri.parse("https://play.google.com/store/apps/details?id=" + activity?.packageName.toString() + "")
    val intent = Intent(Intent.ACTION_VIEW, uri)
    startActivity(intent)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接