2012-02-09 30 views
19

Khi tôi tạo thông báo được gửi qua C2DM và nhận được trong ứng dụng của tôi, tôi muốn chuyển một số dữ liệu đi kèm với thông báo đẩy từ C2DM ý định bổ sung. Điều này hoạt động tốt trong lần đầu tiên tôi mở thông báo của mình. Sau đó, dữ liệu được nhận với onNewIntent hoặc trong onCreate tùy thuộc vào trạng thái của hoạt động.Thông báo trên thanh trạng thái Android - Ý định nhận các tính năng bổ sung cũ vào lần thứ hai

Nhưng nếu tôi gửi thông báo đẩy thứ hai thông qua C2DM, nó sẽ được nhận đúng với dữ liệu mới nhưng khi nhận được phần bổ sung từ mục đích tôi vẫn nhận được dữ liệu từ tin nhắn trước đó. Tiêu đề và dữ liệu tôi muốn xem được hiển thị chính xác trong thông báo. Vì vậy, một cái gì đó phải là sai ý định của tôi. Điều này xảy ra nếu hoạt động đang hoạt động và nếu nó không hoạt động.

Để tạo thông báo tôi làm như sau:

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); 

Để sau đó đọc intents:

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(); 
    } 
} 

Bất kỳ lời đề nghị?

+0

nhờ này giải quyết vấn đề của tôi :) – SAndroidD

Trả lời

37

Bạn cần phải thiết lập một lá cờ sạch để PendingIntent:

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

Có một cái nhìn at this post cung cấp cho một lời giải thích dài hơn.

5

Sử dụng onNewIntent() phương pháp

PendingIntent pi = PendingIntent.getActivity(context, UNIQUE_ID, 
    intent, PendingIntent.FLAG_UPDATE_CURRENT); 
Các vấn đề liên quan