无法使用CLEAR_TOP标志启动市场活动

时间:2012-09-12 15:40:43

标签: android

请考虑此代码段,提示用户对市场上的应用进行评分:

private void backToMainActivity() {
    Intent i = new Intent(mActivity, MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    mActivity.startActivity(i);

    mActivity.finish();
}

...

if (mRateToast.leftClicked(x, y)) {
    setRate(true);

    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + GameGlobals.PACKAGE_NAME));
    i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK);
    mActivity.startActivity(i);

    backToMainActivity();
} else if (mRateToast.rightClicked(x, y)) {
    setRate(false);
    backToMainActivity();
}

这样做是检测按下了什么按钮(Rate或Later),相应地设置一个标志并在需要时运行市场应用程序。无论按哪个按钮,我都想返回主菜单(这是一个游戏活动,远离主菜单活动1个活动)。

在Android 4.1上,这很好用 - 市场打开到应用页面,从市场返回时,我在主菜单上。在android< = 2.3,市场没有打开,我只是直接返回主菜单。但是,如果我在i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);方法中对backToMainActivity发表评论,它会打开。这会导致其他问题,例如后退按钮返回错误的活动而不是退出应用程序,因此不是解决方案。

如何运行市场,返回主菜单并将主菜单活动置于活动堆栈的顶部?

注意:我没有尝试过,但删除finish也不是一个选择。我的游戏活动也可以直接由外部应用程序启动,在这种情况下,如果我删除finish来电,由于某种原因,CLEAR_TOP将无效,并按主菜单活动上的后退按钮将返回游戏活动而不是退出应用程序。

2 个答案:

答案 0 :(得分:0)

试试这个

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + GameGlobals.PACKAGE_NAME));
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity.startActivityForResult(i,1552);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1552){
        backToMainActivity();
    }
}

答案 1 :(得分:0)

我通过删除Intent.FLAG_ACTIVITY_NEW_TASK并使用MoshErsan中的startActivityForResult来解决此问题。显然,作为一项新任务启动市场并不适用于android< = 2.3中的CLEAR_TOP

如果有人可以解释为什么原始方法不起作用或提供更好的解决方案,我会在一两天内接受答案,否则我会接受我的答案。