4

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

我将其设置如下,

Alarmtimefor30 具有以毫秒为单位的给定日期。

  am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30*1440*60000 , pi);

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

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

请帮忙!谢谢!

4

1 回答 1

7

默认情况下,Java 中的整数文字类型int为 32 位数字。当您将 anint与 an相乘时int,结果也是 an int,因此您的结果将被截断。显然, to 的参数setRepeating是 a long,但这并不意味着编译器会为你解决这个问题——你的乘法仍然会被截断。

解决方案是显式强制文字为 type long,这是一个 64 位数字:

am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30L*1440L*60000L , pi);
于 2013-07-25T12:30:05.027 回答