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

これが行うことは、押されたボタン (Rate または Later) を検出し、それに応じてフラグを設定し、必要に応じてマーケット アプリを実行することです。どのボタンを押しても、メイン メニューに戻りたい (これはゲーム アクティビティであり、メイン メニュー アクティビティから 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

MoshErsanの回答で説明されているように、削除Intent.FLAG_ACTIVITY_NEW_TASKして使用することでこれを解決しました。どうやら新しいタスクとして市場を開始することは、android <= 2.3 ではうまく機能しません。startActivityForResultCLEAR_TOP

誰かが元のアプローチが機能しなかった理由を説明したり、より良い解決策を提供したりできる場合は、1 日か 2 日以内にその回答を受け入れます。そうでない場合は、私のものを受け入れます。

于 2012-09-12T20:06:23.697 に答える