2013-04-20 160 views
1

我試圖根據用戶定義的值創建通知,但我的警報不工作;它從未觸發過。Android警報接收器從未觸發

片段代碼:

// Set reminder 
      // From java.util.Calendar; 
      Calendar timeNow = Calendar.getInstance(); 
      timeNow.setTimeInMillis(System.currentTimeMillis()); 

      Calendar thatDate = Calendar.getInstance(); 
      thatDate.setTimeInMillis(System.currentTimeMillis()); 



      // add date and time to calender object 

      //** Im trying to set the alarm for the 20th of April, 2013 at 14:03** 
      thatDate.add(Calendar.MINUTE, 3 - timeNow.get(Calendar.MINUTE)); 
      thatDate.add(Calendar.MONTH, 3 - timeNow.get(Calendar.MONTH)); //Its April, so I did 3 not 4 

      thatDate.add(Calendar.DAY_OF_MONTH, 
        20 - timeNow.get(Calendar.DAY_OF_MONTH)); 

      thatDate.add(Calendar.HOUR, 14 - timeNow.get(Calendar.HOUR)); 
      thatDate.add(Calendar.YEAR, 2013 - timeNow.get(Calendar.HOUR)); 


      Intent alarmintent = new Intent(getActivity(), 
        AlarmReceiver.class); 
      alarmintent.putExtra("title", titleEt.getText().toString()); 
      alarmintent.putExtra("note", desc.getText().toString()); 

      PendingIntent sender = PendingIntent 
        .getBroadcast(getActivity(), ALARM_ID, alarmintent, 
          PendingIntent.FLAG_UPDATE_CURRENT 
            | Intent.FILL_IN_DATA); 

      /* 
      * VERY IMPORTANT TO SET FLAG_UPDATE_CURRENT... This will send 
      * the correct extra's informations to the AlarmReceiver class 
      */ 

      // Get the AlarmManager service 

      AlarmManager am = (AlarmManager) getActivity() 
        .getSystemService(Context.ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, thatDate.getTimeInMillis() - timeNow.getTimeInMillis(), sender); 

而且我報警Reciver代碼:

public class AlarmReceiver extends BroadcastReceiver { 

private static int NOTIFICATION_ID = 1; 

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

    NotificationManager mNotificationManager = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    NotificationManager manger = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(
      R.drawable.ic_stat_reminder, "Todo Reminder", 
      System.currentTimeMillis()); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 
      NOTIFICATION_ID, new Intent(context, AlarmReceiver.class), 0); 
    Bundle extras = intent.getExtras(); 
    String title = extras.getString("title"); 

    // Get the title and description of our Notification 

    /* 
    * Notification noti = new Notification.InboxStyle(new 
    * Notification.Builder() .setContentTitle("5 New mails from " + 
    * sender.toString()) .setContentText(subject) 
    * .setSmallIcon(R.drawable.new_mail) .setLargeIcon(aBitmap)) 
    * .addLine(str1) .addLine(str2) .setContentTitle("") 
    * .setSummaryText("+3 more") .build(); 
    */ 

    String note = extras.getString("note"); 
    notification.setLatestEventInfo(context, note, title, contentIntent); 
    notification.flags = Notification.FLAG_INSISTENT; 
    notification.defaults |= Notification.PRIORITY_MAX; 
    // Set the default sound for our notification 

    // notification 
    manger.notify(NOTIFICATION_ID++, notification); 

} 
}; 

回答

0

只能使用thatDateset的時間是實時的,而不是延遲。

AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
am.set(AlarmManager.RTC_WAKEUP, thatDate.getTimeInMillis(), sender); 
+1

它還沒有工作 – AndroidDev 2013-04-20 13:14:37