在我的应用程序中,我需要在用户在应用程序中执行某些操作后的1周或1个月后发送通知...它正在使用类似于>>的BroadcastReceiver。
public void startMyReceiver() {
Long time = new GregorianCalendar().getTimeInMillis() + 1000 * 60 * 60 * 24 * 30; <-- for 1 month (it's getting numeric overflow, but is working)
Long interval = 2592000000L;
Intent intentAlarm = new Intent(this, MyReceiver.class);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, interval, PendingIntent.getBroadcast(this, 2, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}
然后是简单的接收器类&gt;&gt;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
sendNotification();
{
}
然后在AndroidManifest.xml&gt;&gt;
中<application>
<receiver android:name="mypackage.MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
我已经设定了&#34; android.intent.action.BOOT_COMPLETED&#34;以为它会恢复计数器并继续计算直到时间结束......
但是当设备启动时,它会立即启动我的接收器......
如何设置接收器1个月,重新启动后它会继续计数?
- 编辑 - 新问题 -
如何最简单的方式来存储时间并进行计算?这样的事情? &GT;&GT;
1 - 第一次定义报警时,我在Long firstTime中保存当前时间,以毫秒为单位,并将报警定义为firstTime + longOneMonth;
2 - 在Receiver for boot中,我再次获取当前时间并将其保存在Long rebootTime中,然后我这样做:
Long timeDifference = rebootTime - firstTime;
Long differenceToMonth = longOneMonth - timeDifference;
再次将Receiver设置为时间rebootTime + differenceToMonth ??
- 编辑2 -
也许如果我将第一个接收器设置毫秒转换为日期字符串并将其应用()到共享首选项,重新启动时,我可以再次将其转换为毫秒数...我想它会工作并且更容易
答案 0 :(得分:1)
编辑:
计算时间的最简单方法是,当您设置闹钟时,您将now
时间存储为毫秒。下次你再次获得时间,并在之前存储的时间减去它。这是时差!
最后减去带差异值的一个月时间
Long time =
new GregorianCalendar().getTimeInMillis() +
( 1000 * 60 * 60 * 24 * 30 ) -
TIME_DIFFERENCE