2017-01-09 54 views
1

我使用Android中的AlarmManager編碼鬧鐘。 我想在特定的日期和時間設置它。爲了檢查它是否工作,我在今天的日期(2017年1月9日)嘗試了代碼。 問題是警報沒有被觸發。相反,如果我改變Calendar.DAY_OF_MONTH 8而不是9,它的作品,彷彿從DAY_OF_MONTH開始0一樣的Calendar.MONTH,但我知道它不會啓動從0在一天前觸發的特定日期和時間的Android AlarmManager

這是怎麼回事?這裏是我的報警代碼:

private class AppointmentAlarmSetter extends AsyncTask<String, Void, Boolean> 
    { 
    @Override 
    protected Boolean doInBackground(String... strings) 
     { 
     // The Alarm's Request Code 
     int currentID = Constants.APPOINTMENT_ALARM_ID; 

     // Start setting the alarm for current appointment 
     Intent alarmIntent = new Intent(context, AlarmBroadcastReceiver.class); 

     // put the RequestCode ID as intent's extra, in order to identify which alarm is triggered 
     alarmIntent.putExtra("request_code", currentID); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast 
         (
         context.getApplicationContext(), 
         currentID, 
         alarmIntent, 
         PendingIntent.FLAG_CANCEL_CURRENT 
         ); 

     Calendar calendar = Calendar.getInstance(); 

     calendar.setTimeInMillis(System.currentTimeMillis()); 

     // Specify the date/time to trigger the alarm 
     calendar.set(Calendar.YEAR, 2017); 
     calendar.set(Calendar.MONTH, 0); 
     calendar.set(Calendar.DAY_OF_MONTH, 9); 
     calendar.set(Calendar.HOUR_OF_DAY, 14); 
     calendar.set(Calendar.MINUTE, 16); 
     calendar.set(Calendar.SECOND, 0); 

     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

     // Set the exact time to trigger the alarm 
     alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

     return true; 
     } 
    } 
+0

愚蠢的問題,但我更願意知道...你的設備日期確定嗎? – ChristopheCVB

+0

是的,在我編譯代碼的移動設備和PC中,日期都是正確的。 – Ciammarica

回答

0

使用本:

Calendar now = Calendar.getInstance(); 
     Calendar wakeupcall = Calendar.getInstance(); 
     wakeupcall.setTimeInMillis(System.currentTimeMillis()); 
     wakeupcall.set(Calendar.HOUR_OF_DAY, 18); 
     wakeupcall.set(Calendar.MINUTE, 30); 

     if (wakeupcall.getTimeInMillis() <= now.getTimeInMillis()) 
      _alarm=wakeupcall.getTimeInMillis() + (AlarmManager.INTERVAL_DAY+1); 
     else 
      _alarm=wakeupcall.getTimeInMillis(); 


     al = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     notif= new Intent(this,TestNotifyService.class); 
     fintent = PendingIntent.getService(this,0,notif,0); 

     if (SDK_INT < Build.VERSION_CODES.KITKAT) { 
      al.set(AlarmManager.RTC_WAKEUP,_alarm, fintent); 
     } 
     else if (Build.VERSION_CODES.KITKAT <= SDK_INT && SDK_INT < Build.VERSION_CODES.M) { 
      al.setExact(AlarmManager.RTC_WAKEUP,_alarm,fintent); 
     } 
     else if (SDK_INT >= Build.VERSION_CODES.M) { 
      al.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,_alarm,fintent); 
     } 
+0

嗯,我不認爲這個代碼適合我的需要:(只有在預定義的日期觸發報警一次,如果我只設置我的代碼工作的時間(小時和分鐘),它不工作,只有當我添加當前日期但是如果我將DAY_OF_MONTH設置爲少一天,我的代碼也可以在指定日期內工作 換句話說,我不知道爲什麼從0開始,因爲它發生了幾個月 – Ciammarica

+0

我面臨同樣的問題,當我在某些庫中使用倒數計時器,它也從0開始 –

1

我發現的錯誤......在我的代碼另一部分我有以下兩行:

Calendar appointmentDate = calendar; 
appointmentDate.add(Calendar.DAY_OF_MONTH, 1); 

通過評論他們,一切正常。