在我的应用程序中,我需要发送通知的时间是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));
}
那么简单的接收器类>>
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
sendNotification();
{
}
然后在AndroidManifest.xml >>
<application>
<receiver android:name="mypackage.MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
我已经设置了“android.intent.action.BOOT_COMPLETED”,认为它将恢复计数器并继续计数直到时间结束...
但是它在设备启动时立即启动我的接收器...
如何将接收器设置为1个月,然后在重新启动后继续计数?
- 编辑 - 新的问题 -
如何将存储的时间和做计算最简单的方法?像这样? >>
1 - 首次定义警报时,我将当前时间以毫秒为单位保存在Long firstTime中,并将警报定义为firstTime + longOneMonth;
2 - 在接收机开机,我再次获取当前时间,并将其保存在龙rebootTime,然后我做的:
Long timeDifference = rebootTime - firstTime;
Long differenceToMonth = longOneMonth - timeDifference;
,并重新设置接收机时间rebootTime + differenceToMonth?
- EDIT 2 -
也许,如果我转换的第一接收机设置millisseconds的日期字符串和应用()到共享偏好,重新启动的时候,我可能会再次将其转换成millisseconds .. 。我想这会工作,更容易
保存和sharedPreferences,文件或数据库检索。首先可能是最简单的。 – MikeT
请在主文件中添加一个新问题 –