2011-07-05 12 views
11

通知トレイの通知を作成しています。余分なインテントを削除できません!

Intent intent = new Intent(context, MyActivity.class); 
intent.putExtra("foo", true); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.setData(Uri.parse("" + System.currentTimeMillis())); 

MyActivityクラスは、「foo」パラメータが表示された状態で正常に起動します。しかし、私はその後、余分なものを取り除くことができない - テントに固執しているようだ:

// MyActivity 
public void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    // please go away.. 
    intent.removeExtra("foo"); 
    getIntent().removeExtra("foo"); 
} 

反復処理を意図のキーの上には、「foo」がもう存在しないことを示しています。しかし、もし私がその活動をバックグラウンドにしてから再びフォアグラウンドに持っていくと、 "foo"パラメータが再び現れます。

誰でも本当にそれを取り除く方法を知っていますか?私もsetIntent()、同じ動作を呼び出してみました。ランチャーが元の意図を保持し、それを再利用し続けるようなものです。

ありがとうございました

+0

これは、Javaとポインタを持つばかげたケースの1つです。 fooを使わずにコピーした後、元の意図を確定しなければならないかもしれません。 – hwrdprkns

+0

ああ、元の意図をどのようにして完成させるのですか?onNewIntent()からfinish()を呼び出すようなことをして、もう一度アクティビティを再起動しますか?私はユーザーが卑劣なジャンプを見ないと思うし、私は余分な "foo"を取り除くだろう。私はそれが動作すると思う! – user291701

+0

'Intent.finalize()'? – hwrdprkns

答えて

0

これはまさにAndroidがやっていることです。 onNewIntentメソッド内のintentパラメータを変更しても、通知システムの格納されたインテントには影響しません。新しいインテントを作成し、それをローカルにアクティビティに保存し、他のデータと同様に保存して復元する必要があります。

編集:インテント自体を再利用する必要がない場合は、関連するデータを別々に保存する方が意味があります。

+0

ああ、私はまったくフォローしていません - あなたは新しいインテントを作成し、setIntent()をコールすることを意味しますか? (同じ振る舞いをするようです)。さもなければ私たちは自分自身でこの状態を管理しなければなりませんか?ありがとう – user291701

+0

ああ、余分な変更を加えて通知バーにインテントを戻そうとしていますか?私は適切なことは、新しい意図と新しい通知を作成することだと思います。 – robamaton

+7

ええと正確に - 私はその意図を余分に削除したい、そして次にユーザーがランチャーから起動するとき、私はその余分なものを消したい。私は新しい通知を作成しようとし、それとsetIntent()を呼び出しましたが、同じ動作 - 「foo」キーが私を苦しめて戻ってきます。 – user291701

関連する問題