2016-08-23 6 views
1

毎日同時に通知するアラームを実装しようとしています。それはうまく動作します。しかし、私は再びアラームを設定すると、アラームが設定されている時間が経過しているので、来るのを待つことなく、その場で私に通知します。しかし、Calendar.DATECalendar.DAYS_OF_MONTHに変更すると、私に通知されません。だから、私が間違っているところで助けてくれる人がいます。私は以下のコードを共有しています。毎日のアラーム問題、Calendar.DATEとCalendar.DAYS_OF_MONTHの相違

 public void setNotification() { 
     PendingIntent pendingIntent = createPendingIntent(); 

     Calendar calendarToSet=Calendar.getInstance(); 
     Calendar currentTime=Calendar.getInstance(); 
     calendarToSet.set(Calendar.HOUR,10); 
     calendarToSet.set(Calendar.MINUTE,0); 
     calendarToSet.set(Calendar.SECOND,0); 
     calendarToSet.set(Calendar.AM_PM,Calendar.AM); 

     if(calendarToSet.before(currentTime)) 
     { 
      calendarToSet.set(Calendar.DATE,1); 
     } 


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

     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendarToSet.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent); 
     // Toast.makeText(MyAppManager.context, "set", Toast.LENGTH_LONG).show(); 
} 

     public PendingIntent createPendingIntent() { 
     Intent intent = new Intent(MyAppManager.context, TaffaquhFiddinBroadCastReceiver.class); 
     intent.putExtra("key", "What_to_say_upon_completing_ablution"); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(MyAppManager.context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     return pendingIntent; 

    } 

私がやっていることは、時間が過ぎた場合に翌日にアラームを設定することですので、助けてください。

Calendar.DATECalendar.DAYS_OF_MONTHの違いは何ですか?

+1

user13答えをご覧ください。 'set'を使うと、あなたの場合は最初の月の日(例01.01)を設定します。 'add'を使うと、現在の暦日にある日を追加するだけです。 – Opiatefuchs

+0

だからセットを使用しています。月の1日目に日付を設定しますか?もしそうなら、あなたが現在設定されている日付が過去のものであれば、アンドロイドのalarmManagerが始まります。それがアラームをすぐに受け取る理由は、 – FaisalAhmed

+1

はいです。 .. – Opiatefuchs

答えて

3

問題は、あなたがそれに日を追加する代わりにの、あなたのCalendarインスタンスの日フィールドを設定あるあります。

変更以下:これに

calendarToSet.set(Calendar.DATE, 1); 

calendarToSet.add(Calendar.DATE, 1); 

またCalendar.DATECalendar.DAYS_OF_MONTHの違いは何ですか?

これらは同じです。DATEは、DAY_OF_MONTHの単なる同義語です。 Calendarクラスのソースコードから

public static final int DATE = 5; 
public static final int DAY_OF_MONTH = 5; 

あなたが見ることができるように、彼らは同じ値を表します。

+0

Calendar.DateとCalendar.Days_Of_Monthの違いは何ですか? – FaisalAhmed

+0

私の編集した答えを見てください。 – earthw0rmjim

+0

本当に助けてくれてありがとう – FaisalAhmed

関連する問題