2012-02-09 31 views
19

C2DM aracılığıyla gönderilen ve uygulamanızda alınan bir bildirim oluşturduğumda, C2DM'den gelen push bildirimi ile gelen bazı verileri aktarmak istiyorum. niyet ekstraları. Bu, bildirimi ilk açtığımda iyi çalışıyor. Daha sonra veriler, etkinliğin durumuna bağlı olarak onNewIntent veya onCreate ile alınır.Android Durum Çubuğu Bildirimleri - Eski ekstraları ikinci defa alma niyeti

Ancak, C2DM üzerinden ikinci bir itme bildirimi gönderirseniz, yeni verilerle doğru şekilde alınır, ancak eklerden alma geldiğinde, hala önceki iletiden veri alırım. Görmek istediğim başlık ve veriler bildirimde doğru şekilde gösteriliyor. Yani bir şey benim amacım yanlış olmalı. Bu, etkinlik çalışıyorsa ve değilse de olur.

aşağıdaki yapmam bildirimi oluşturmak için:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
Notification notification = new Notification(R.drawable.ic_stat_notify_push, "Message received", System.currentTimeMillis()); 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
notification.defaults |= Notification.DEFAULT_LIGHTS; 
Intent intent = new Intent(context, DesktopApp.class); 
intent.setAction("android.intent.action.MAIN"); 
intent.addCategory("android.intent.category.LAUNCHER"); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra("msg_id", msg_id); 
intent.putExtra("title", title); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
notification.setLatestEventInfo(context, "New message", title + String.valueOf(msg_id), pendingIntent); 
notificationManager.notify(0, notification); 

sonra amaçları okumak için:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Intent myIntent = getIntent(); // this is just for example purpose 
    int i = myIntent.getIntExtra("msg_id", -1); 
    if (i != -1) Toast.makeText(this, "Got message! " + String.valueOf(i), Toast.LENGTH_LONG).show(); 
} 


@Override 
public void onNewIntent(Intent intent){ 
    super.onNewIntent(intent); 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     int i = extras.getInt("msg_id", -1); 
     if (i != -1) Toast.makeText(this, "Got message! " + String.valueOf(i), Toast.LENGTH_LONG).show(); 
    } 
} 

herhangi bir öneriniz?

+0

teşekkürler onNewIntent() yöntemi sorunumu çözmek :) – SAndroidD

cevap

37

Sen PendingIntent temiz bir bayrak ayarlamanız gerekir:

PendingIntent pintent = 
    PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT); 

daha uzun bir açıklama verir göz at this post var.

5

bunu kullanın

PendingIntent pi = PendingIntent.getActivity(context, UNIQUE_ID, 
    intent, PendingIntent.FLAG_UPDATE_CURRENT); 
İlgili konular