2012-03-14 33 views
5

Tôi đang cố gắng hiển thị các thông báo khác nhau sau một khoảng thời gian nhưng điều gì xảy ra là nó cập nhật PendingIntent hiện tại bằng kết quả mới.Mục mới PendingIntent cập nhật ý định hiện tại

Mở nút bấm tôi làm những điều sau đây

try{ 
       adapter.OpenDB(); 
      int id = adapter.getMaxId("reminder")+1; 
      adapter.CloseDB(); 
      Intent intent = new Intent(MilestonesActivity.this, AlarmReceiver.class); 
      intent.putExtra("message", ""+editMsg.getText()+" "+editDate.getText());    
      intent.putExtra("id", id); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(MilestonesActivity.this, 0, 
       intent, PendingIntent.FLAG_UPDATE_CURRENT); 
       am.set(AlarmManager.RTC_WAKEUP, 
       reminddate.getTimeInMillis(), pendingIntent); 

      adapter.CloseDB(); 
      }catch (Exception e) { 
       // TODO: handle exception 
      } 

AlarmReceiver.java

@Override 
public void onReceive(Context context, Intent intent) { 

    Intent i =new Intent(context, NotificationService.class); 

    try{ 

    int id = intent.getExtras().getInt("id"); 
     i.putExtra("id", id); 
    CharSequence message = intent.getExtras().getString("message"); 
     i.putExtra("message", message); 
    }catch (Exception e) { 
     // TODO: handle exception 
    } 
    context.startService(i); 

} 

Notificatio nService.java

public void show(Intent intent) { 
try{ 
     NotificationManager nm; 
     Log.e("recieve", "ok"); 
     nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     CharSequence from = "Lawyer app Reminder"; 
     CharSequence message = intent.getExtras().getString("message"); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(), 
       PendingIntent.FLAG_ONE_SHOT);// also tried FLAG_UPDATE_CURRENT 
     int id =intent.getExtras().getInt("id"); 
     Log.e("I", ""+id); 
     Notification notif = new Notification(R.drawable.message_active, 
     "Lawyer app Reminder.", System.currentTimeMillis()); 
     notif.defaults = Notification.DEFAULT_ALL; 
     notif.flags = Notification.FLAG_AUTO_CANCEL; 

     notif.setLatestEventInfo(this, from, message, contentIntent); 
     nm.notify(id, notif); 

}catch (Exception e) {   
    e.printStackTrace();    
} 

plaese giúp tôi ra với điều này .thanks trước

Trả lời

3

Nếu giá trị của id trong nm.notify(id, notif); là giống nhau thì thông báo sẽ được ghi đè.

Vì vậy, bạn cần phải chắc chắn rằng các id khác nhau cho Notification khác nhau

+0

có id khác nhau mỗi lần và khi tôi kích hoạt yêu cầu đầu tiên được kích hoạt sau 2 phút và giây sau 3 phút thì sẽ hiển thị thông báo đơn sau 3 phút không sau 2 phút như cập nhật này. – Mahesh

30

tôi tìm thấy nó

tham số thứ hai của constructor pendingintent không nên cùng (được 0 cứng mã hoá)

tôi đã thay đổi nó thành (int) System.currentTimeMillis() sao cho nó không được giống nhau :)

Intent ni =new Intent(NotificationService.this,ModifyDatabaseService.class); 
     ni.putExtra("id", ""+id); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), ni, 
       PendingIntent.FLAG_ONE_SHOT); 
+12

Mother-uckers! Tôi đã có cùng vấn đề y hệt. Tài liệu -ing thậm chí còn nói "hiện không được sử dụng". Hiện nay không được sử dụng ass của tôi. – Timmmm

+0

* Cập nhật *: Khi thử nghiệm thêm, nó thực sự hoạt động với chỉ 0 có tham số thứ hai miễn là bạn sử dụng 'FLAG_ONE_SHOT'. Bạn có thể làm một trong hai hoặc về cơ bản. 'FLAG_ONE_SHOT' có vẻ chính xác hơn. – Timmmm

+1

* Cập nhật 2 *: Bỏ qua nhận xét trước của tôi. 'FLAG_ONE_SHOT' làm cho' Intent' trước đó không làm gì cả. I E. khi 'FLAG_ONE_SHOT'' Intent' được sử dụng, nó biến thành một 'Intent()' nop. Do đó, bạn nên luôn sử dụng mã yêu cầu duy nhất. – Timmmm

0

Trong trường hợp của bạn nếu thứ hai PendingIntent là "bằng" với trước đó, nó thay thế nó.

PendingIntents đều bình đẳng nếu tất cả những điều sau đây đều giống nhau:

  1. Các requestCode (tham số thứ hai truyền cho phương thức nhà máy)
  2. Tất cả các 's Intent dữ liệu (type, uri, chủng loại. .etc)

Vì vậy, nếu bạn không muốn số thứ hai PendingIntent để ghi đè trước đó, hãy thay đổi một trong danh sách ở trên.

Các vấn đề liên quan