0

2つの部分で構成されるアプリケーションがあります

1-一連の活動。(ログイン、ダッシュボード、フィード)。2-プッシュ サーバーによって駆動されるバックグラウンド サービス。

サービスがプッシュを受信するたびに、保留中のインテントで通知を作成します。このインテントは、プッシュ サーバーから受信した文字列エクストラを追加します。例: 文字「N」または「R」を追加します。

サービスアプリケーションをインストールした後、最初の実行後、エクストラはインテントで正しく送信されますが、その後サーバーがインテントを介してアプリケーションにメッセージを送信するたびに、エクストラは変更されません。

最初のメッセージが「N」を送信すると、後続のすべてのメッセージが「N」を送信します。

上記の説明は複雑すぎるため、コードのスニペットを示します。

これは、保留中のインテントで通知を作成するサービスのコードです

    Notification n = new Notification();            
    n.flags |= Notification.FLAG_SHOW_LIGHTS;
    n.flags |= Notification.FLAG_AUTO_CANCEL;
    n.defaults = Notification.DEFAULT_ALL;      
    n.when = System.currentTimeMillis();
    // The following line displays N or R depending on the message received . 
    Log.d("Received Type: ",text.substr(0,1); // Example "N" from: "N|Notification Text"

    n.icon = R.drawable.notification_icon;
    Intent i = new Intent(this, MyActivity.class);
    i.putExtra("type", text.substr(0,1);
i.putExtra("text", text.substr(2);
    PendingIntent pi = PendingIntent.getActivity(this, 0, i , 0);
    n.setLatestEventInfo(this, NOTIF_TITLE, "Notification: " + text.substring(2), pi);

これは、インテントからデータを受け取るアクティビティです

    super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
activeWebview  = (WebView) findViewById(R.id.webview);

Intent sender=getIntent();
type = sender.getStringExtra("type");   // Assume this is defined somewhere
text = sender.getStringExtra("text");   // Assume this is defined somewhere
    Log.d( "Type received:" , type );  // This everytime displays "N" 

私の問題は、インテントで送信されたエクストラが新しい通知を受け取るたびに同じであり、アプリケーションとサービスを終了して再度開始しない限り変更されないことです。

あたかもメモリのどこかに保存されているかのように、それをきれいにする必要があります

4

2 に答える 2

1

保留中のインテントにフラグを追加する必要があります。

PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_UPDATE_CURRENT

PendingIntent pi = PendingIntent.getActivity(this, 0 , i , PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_UPDATE_CURRENT);

そうしないと、エクストラが更新されません。 http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

于 2013-02-08T06:13:35.763 に答える
1

解決策はこの部分にあると思います:

PendingIntent pi = PendingIntent.getActivity(this, >>>> 0 <<<<< , i , 0);

この 0 は、通知の種類ごとに変更する必要があります

于 2012-07-31T21:52:08.610 に答える