4

毎日、毎週、毎月アラームを設定するためのAndroidアプリを開発しています。最初の 2 つは、指定された日付と時刻をミリ秒に変換することで正常に機能しています。しかし、毎月同じことをしようとするとうまくいきません。まったく異なる日付形式があります。

以下のように設定していますが、

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 ビットの数値である 型になります。を で乗算するintint、結果もintになるため、結果は切り捨てられます。明らかに への引数setRepeatingは alongですが、これはコンパイラがこれを修正するという意味ではありません。乗算は引き続き切り捨てられます。

解決策は、リテラルをlong64 ビットの数値である型にすることを明示的に強制することです。

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