2013-09-27 44 views
0

我對於我創建的應用程序具有此最終功能。我所做的應用程序是一個日曆,用於保存事件並在時間到達時通知用戶。我遇到的問題是,當我創建多個通知(或多個事件)時,它只會通知最新創建的通知。我試圖爲通知製作不同的ID,但沒有成功。這裏是我修改的代碼。它來自我見過的教程。如何在Android中實現多個定時通知

AlarmTask.java

public class AlarmTask implements Runnable{ 
// The date selected for the alarm 
private final Calendar date; 
// The android system alarm manager 
private final AlarmManager am; 
// Your context to retrieve the alarm manager from 
private final Context context; 

private final long alarmID; 

public AlarmTask(Context context, Calendar date, long id) { 
    this.context = context; 
    this.am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    this.date = date; 
    this.alarmID = id; 
} 

@Override 
public void run() { 
    // Request to start are service when the alarm date is upon us 
    // We don't start an activity as we just want to pop up a notification into the system bar not a full activity 

    Intent intent = new Intent(context, NotifyService.class); 
    intent.putExtra(NotifyService.INTENT_NOTIFY, true); 
    intent.putExtra("alarmID", alarmID); 
    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); 

    // Sets an alarm - note this alarm will be lost if the phone is turned off and on again 
    am.set(AlarmManager.RTC, date.getTimeInMillis(), pendingIntent); 
} 

}

NotifyService.java

public class NotifyService extends Service { 

/** 
* Class for clients to access 
*/ 
public class ServiceBinder extends Binder { 
    NotifyService getService() { 
     return NotifyService.this; 
    } 
} 

// Unique id to identify the notification. 
private static final int NOTIFICATION = 143; 
// Name of an intent extra we can use to identify if this service was started to create a notification 
public static final String INTENT_NOTIFY = "com.gpplsmje.mac.calendar.utils.INTENT_NOTIFY"; 
// The system notification manager 
private NotificationManager mNM; 

@Override 
public void onCreate() { 
    Log.i("NotifyService", "onCreate()"); 
    mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("LocalService", "Received start id " + startId + ": " + intent); 

    // If this service was started by out AlarmTask intent then we want to show our notification 
    if(intent.getBooleanExtra(INTENT_NOTIFY, false)){ 
     showNotification(intent.getLongExtra("alarmID", 0)); 
    } 
    // We don't care if this service is stopped as we have already delivered our notification 
    return START_NOT_STICKY; 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return mBinder; 
} 

// This is the object that receives interactions from clients 
private final IBinder mBinder = new ServiceBinder(); 

/** 
* Creates a notification and shows it in the OS drag-down status bar 
*/ 
@SuppressWarnings("deprecation") 
private void showNotification(long alarmID) { 
    SaveEvent event = new SaveEvent(this); 
    event.open(); 

    Log.d("Notification: ID", alarmID + ""); 
    // This is the 'title' of the notification 
    CharSequence title = event.getEventName(alarmID); 
    // This is the icon to use on the notification 
    int icon = R.drawable.icon_reminder; 
    // This is the scrolling text of the notification 
    CharSequence text = event.getEventDesc(alarmID);   
    // What time to show on the notification 
    long time = System.currentTimeMillis(); 

    event.close(); 

    Intent backToEventDetail = new Intent(this, CalendarEventDetail.class); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, backToEventDetail, 0); 

    Notification notify = new Notification.Builder(this) 
     .setContentTitle(title) 
     .setContentText(text) 
     .setSmallIcon(icon) 
     .setContentIntent(contentIntent).getNotification(); 

    notify.defaults = Notification.DEFAULT_SOUND; 


    notify.flags = Notification.FLAG_AUTO_CANCEL; 

    // Send the notification to the system. 
    mNM.notify(Integer.parseInt(String.valueOf(alarmID)), notify); 

    // Stop the service when we are finished 
    stopSelf(); 
} 
} 

從我的代碼明白了,AlarmTask.java接收到報警日期,並將它通知當天。我傳遞的ID是我保存在手機數據庫中的事件的ID。但我無法獲得它添加多個通知。它只收到我保存的最新內容。我希望它能夠獲取所有事件併爲每個事件設置通知。有人可以幫我嗎?這樣

PendingIntent contentIntent = PendingIntent.getActivity(this, (int)(Math.random() * 100), backToEventDetail, PendingIntent.FLAG_UPDATE_CURRENT); 

回答

1

創建掛起的意圖與下面的代碼創建待定意圖

PendingIntent contentIntent = PendingIntent.getActivity(this, Integer.parseInt(String.valueOf(alarmID)), backToEventDetail, Intent.FLAG_ACTIVITY_NEW_TASK);