1

考虑这个提示用户对市场上的应用程序进行评分的代码片段:

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();
}

它的作用是检测按下了哪个按钮(速率或稍后),相应地设置一个标志并在需要时运行市场应用程序。无论按下哪个按钮,我都想返回主菜单(这是一个游戏活动,距离主菜单活动1个活动)。

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

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

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

4

2 回答 2

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();
    }
}
于 2012-09-12T15:50:34.210 回答
0

我通过删除Intent.FLAG_ACTIVITY_NEW_TASK和使用MoshErsan在他的回答startActivityForResult中描述的方法解决了这个问题。显然,在 android <= 2.3中将市场作为一项新任务启动并不好。CLEAR_TOP

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

于 2012-09-12T20:06:23.697 回答