我有AlarmManager
以显示通知。我不希望每次启动应用时都会收到通知。我读了很多但没什么令人满意的。 doNotification
中的方法MainActivity.java
如下所示:
public void doNotification(){
AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, AlarmReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, i,PendingIntent.FLAG_CANCEL_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP ,calendar.getTimeInMillis(), 1000*60*60*24*30 , pending); //every month
}
此方法位于OnCreate
类MainActivity
中。
我知道,这就是我每次启动应用程序时收到通知的原因。
我的目标是每月发出一次通知,从第一次启动应用的日期开始。例如,用户在7月5日启动应用程序,然后您将收到每月5日的通知。
我怎样才能做到这一点?
谢谢。
编辑:根据我使用SharedPreferences
的评论,正确使用它。这是新代码:
public void doNotification(){
boolean isFirstAlarm = getSharedPreferences("ALARMFIRSTTIME",MODE_PRIVATE).getBoolean("isFirstAlarm",false);
if(!isFirstAlarm) {
AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, AlarmReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60 * 24 * 30, pending); //every month
getSharedPreferences("ALARMFIRSTTIME", MODE_PRIVATE)
.edit()
.putBoolean("isFirstAlarm",true)
.apply();
}
}