1

メソッドをオーバーライドするGCMBaseIntentServiceサービスクラスで使用しています。コードは次のとおりです。GCMBaseIntentServiceonMessage(Context,Intent)

protected void onMessage(Context context, Intent intent) {
    Log.i(TAG, "Received message");

    //String message = getString(R.string.gcm_message);
    String id=intent.getExtras().getString("event_id");
    String message=intent.getExtras().getString("title");
    String eventname=intent.getExtras().getString("event_name");

    generateNotification(getApplicationContext(), id, message, eventname);  
}

private static void generateNotification(Context context, String id, String message, String eventname) 
{
    int icon = R.drawable.ic_stat_gcm;
    long when = System.currentTimeMillis();
    NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(icon, message, when);

   //new intent
    Intent notificationIntent = new Intent(context, EventDescription.class);
    notificationIntent.putExtra("event_id", id);//need this id in the eventdescription activity

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, eventname, message, intent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    notificationManager.notify(0, notification); 
}

問題は、この通知をクリックしてEventdescriptionアクティビティでインテントからエクストラを抽出し、ID を出力することです。最初にのみ正しい値が表示され、その後は通知ごとに常に最初の値が表示されます。助けてください!

4

4 に答える 4

0

後続Intentの は十分に異なっていないため、リサイクルされています。具体的には、 を変更しextrasても、システムの観点からは明確なインテントは作成されません。

Intent.filterEqualsのドキュメントでは、アクション、データ、タイプ、クラス、カテゴリの 1 つ以上を変更する必要があると説明されています。したがって、1 つのアプローチは、いくつかの識別情報 (この場合はevent_id) をデータ URI に貼り付けることです。この URI を何かに使用する必要はありませんが、意図が明確になるようにします。

詳細については、この関連する質問を参照してください。

于 2012-12-10T18:40:10.543 に答える
0

これを試して

PendingIntent intent = PendingIntent.getActivity(context, **uniqueKey**, notificationIntent, 0);

Pending インテントの getActivity の requestCode は一意である必要があることに注意してください。

すべての通知に固有の値。タイムスタンプまたは受信した ID を入力できます

サーバーから。私はこれを試しましたが、これは機能します.フィードバックを共有してください

于 2012-12-08T19:05:16.707 に答える
0
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
于 2012-12-08T19:07:49.443 に答える
0
   protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notificationsfinal);


    start=1;
    end=15;

    next=(Button)findViewById(R.id.nextbtn);
    prev=(Button)findViewById(R.id.prevbtn);
    statusview=(TextView)findViewById(R.id.status);


    notification_list_view=(ListView)findViewById(R.id.not_listview);
    updatestatus();
    getNotifications();

}
private void getNotifications()
{
    eventnotifierapp app=(eventnotifierapp)getApplication();



    id=getIntent().getExtras().getString("event_id");
    db=new MyDB(this);
    }

これは、この event_id を取得している EventDescription アクティビティです。

于 2012-12-09T11:22:24.713 に答える