每月设置闹钟android

san*_*ana 4 java math android alarmmanager

我正在开发一个Android应用程序,用于每天,每周,每月设置警报.通过将给定日期和时间转换为毫秒,前两个工作正常.但是,当我试图每月做同样的事情时,它不起作用.日期格式完全不同.

我的设置如下,

Alarmtimefor30具有给定的日期(以毫秒为单位).

  am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30*1440*60000 , pi);
Run Code Online (Sandbox Code Playgroud)

我将intervalMillis设为30*1440*60000,结果为2592000000,即30天(毫秒).当我尝试打印30*1440*60000时,结果为1702967296.我不确定可能是什么问题.

是否有另一种方法来设置月度警报(每月特定日期和时间触发)?

请帮忙!谢谢!

dev*_*obf 6

默认情况下,Java中的整数文字将是类型int,这是一个32位数字.当你乘的intint该结果也是int,所以你的结果被截断.显然,参数setRepeating是a long,但这并不意味着编译器会为你解决这个问题 - 你的乘法仍然会被截断.

解决方案是明确强制文字为类型long,这是一个64位数字:

am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30L*1440L*60000L , pi);
Run Code Online (Sandbox Code Playgroud)