Reputation: 641
I am developing an android app for setting alarm on daily, weekly, monthly basis. The first two are working fine by converting the give date and time into milliseonds. But when I am trying to do the same for monthly it doesn't work. There is totally different date format.
I am setting it as below,
Alarmtimefor30 has the given date in milliseconds.
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30*1440*60000 , pi);
I am giving intervalMillis as 30*1440*60000 which results to 2592000000 i.e 30 days in milliseconds. When I try to print 30*1440*60000 it results to 1702967296. I am not sure what could be the problem.
Is there another way to set monthly alarm (to trigger on specific date and time every month)?
Please Help!Thanks!
Upvotes: 4
Views: 725
Reputation: 7213
By default, an integer literal in Java will be of type int
, which is a 32-bit number. When you multiply an int
by an int
the result is also an int
, so your result is being truncated. Obviously the argument to setRepeating
is a long
, but that doesn't mean the compiler will fix this for you - your multiplication will still be truncated.
The solution is to explicitly force the literals to be of type long
, which is a 64-bit number:
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30L*1440L*60000L , pi);
Upvotes: 7