2012-03-31 2 views
1

こんにちは私は学生ですし、ソフトウェア設計コースのプロジェクトとしてAndroidアプリを開発しています。C2DMが同じメッセージを受け取っています

したがって、私はC2DMプロセス全体を動作させることができ、私のデバイスは通知を受け取ることができます。しかし、私が得るメッセージは、別のメッセージをプッシュしても何かを押すたびに常に同じです。

私はここに述べたチュートリアルを次のようだ: http://www.vogella.de/articles/AndroidCloudToDeviceMessaging/article.html

時々私は正しいメッセージを得るか、しかし私は、新しいメッセージをプッシュする30分以上待たなければなりません。別のメッセージを送信するまでにどれくらいの間隔をおかなければなりませんか? (2分の待ち時間がありましたが、同じメッセージが表示されます)、間違っていることがあります。

+0

あなたは「いつも同じメッセージがいつも同じです」と「時々私は正しいメッセージを受け取ります」と言ったが、それは矛盾しているようだ。 –

+0

30分待ってからもう一度押すと正しいメッセージが表示されます。 – L4chong

答えて

0

あなたが見ている可能性があるので、collapse_keyを悪用していないことを確認してください。

私はかなりの量のC2DMを使用しましたが、これは見たことがありません。私はしばしば一連のメッセージを次々と送り、彼らは大丈夫です。

私はあなたが思っているメッセージを受け取っていることを確認するために再度チェックします - インテントパラメータを見てください。

2

以前の呼び出しと同じコンテキスト、requestCode、intent、およびflagsを持つ保留中のインテントが作成され、処理後にキャンセルされないチュートリアルコードに問題があります。したがって、受信者(MessageReceivedActivity)は明らかに以前のPendingIntentを参照しています。この周り

一つの方法: 「requestCode」属性は、現在、例えば、あなたがそこに一意の値を供給することができますpendingIntentを一意にするために、使用されていない:これは、へMessageReceivedActivityできるようになります

int ukey = (int) System.currentTimeMillis(); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, ukey, 
       intent, 0); 

受け取るためにあなたが意図している(意図しない/意図した)意図を得る。

多分、pendingIntentを取り消す方法がありますが、私はそれをうまく行かせることができませんでした。

+0

偉大な、これは私のために働いた。しかし、将来的にこれが崩壊しない保証は何ですか? – Solata

+0

そしてMessageReceivedActivityクラスでは、setIntent(インテント)呼び出しを伴うonNewIntentイベントが必要です。これは、現在の(古いペイロードデータ)インテントがこの(新鮮なペイロードデータ)1にリフレッシュされることを意味します。 – Solata

1

Lars Vogelのチュートリアルに従ったときも同じ問題がありました。ほとんどの場合、同じ問題が発生している可能性があります。つまり、実際には良いメッセージが届いていますが、それが正常に動作していないことを示すアクティビティです。

良いメッセージを受け取っていることを確認するには、onReceive関数にブレークポイントまたはログを入れ、何を得るかを確認してください。

異なるメッセージを受信した場合、問題は私のメッセージと同じです。メッセージの不適切な表示。

VogelのチュートリアルのMessageReceivedActivityは、メソッドの最後にsuper.onCreate(savedInstanceState);を呼び出します。このメソッドでは、最初にメソッドを呼び出す必要があります。 See my detailed solution to a related question here.

関連する問題