2016-11-14 72 views
0

在我的应用程序中,我需要发送通知的时间是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 .. 。我想这会工作,更容易

+0

保存和sharedPreferences,文件或数据库检索。首先可能是最简单的。 – MikeT

+0

请在主文件中添加一个新问题 –

回答

1
  1. 定义另一个引导的BroadcastReceiver。
  2. 在某处存储时间(一个月后)
  3. 设备启动时,所有报警都将消失。所以当设备启动时,调用另一个会再次设置闹钟的功能。但要注意,自上次设置闹钟以来(例如7天前设置了闹钟),应该考虑一段时间,因此您应该始终计算设置时间和现在时间之间的差异;

编辑:计算时间 最简单的方法是,当你设置报警,你直接存储now时间毫秒。下一次,你现在再次得到时间,并减去之前储存的时间。那就是时差!

在端部负一个月的时间差值

Long time = 
new GregorianCalendar().getTimeInMillis() + 
(1000 * 60 * 60 * 24 * 30) - 
TIME_DIFFERENCE 
+0

编辑我的问题,包括一个新文件 –

+0

明白了......它一定会奏效......谢谢! –