考虑这个提示用户对市场上的应用程序进行评分的代码片段:
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
将无法正常工作,并且按主菜单活动上的后退按钮将返回游戏活动而不是退出应用。