Мой OnReceive () BroadcastReceiver вызывается как каждый раз, когда я открываю приложение, хотя сигнал тревоги срабатывает только один раз в 03:00.
Я регистрирую время последнего вызова onReceive (), поэтому я почти уверен, что onReceive () несколько не работает. Также кажется, что код onReceive () выполняется только после того, как я действительно запускаю приложение, а не только когда приложение закрыто (и фактическое выполнение кода ДОЛЖНО произойти)
MonthManager.java
public class MonthManager extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("BISASAM","triggered");
SharedPreferences preferences = context.getSharedPreferences(MainActivity.sharedPrefs, Context.MODE_PRIVATE);
SharedPreferences.Editor editPrefs = preferences.edit();
DateFormat date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.GERMANY);
Date dat = new Date();
Log.d("TRIGGERDATE",date.format(dat));
editPrefs.putString("REC", "Receiver called "+date.format(dat));
editPrefs.commit();
}
}
MainActivity.java
public static final String alarm = "com.example.aufgaben_planer.alarm";
private void registerMyAlarmBroadcast()
{
createPendingIntent();
alarmManager.cancel(pendingIntent);
alarmManager.cancel(PendingIntent.getBroadcast(this,0,new Intent(alarm),0));
alarmManager.cancel(PendingIntent.getBroadcast(this,0,new Intent(alarm),PendingIntent.FLAG_CANCEL_CURRENT));
alarmManager.cancel(PendingIntent.getBroadcast(this,0,new Intent(alarm),PendingIntent.FLAG_UPDATE_CURRENT));
alarmManager.cancel(PendingIntent.getBroadcast(this,0,new Intent(this,MonthManager.class),PendingIntent.FLAG_UPDATE_CURRENT));
alarmManager.cancel(PendingIntent.getBroadcast(this,0,new Intent(this,MonthManager.class),PendingIntent.FLAG_CANCEL_CURRENT));
registerAlarmAt(3,0,0);
}
private void registerAlarmAt(int hour, int min, int sec){
timingCal = Calendar.getInstance();
timingCal.set(Calendar.HOUR_OF_DAY, hour); // At the hour you want to fire the alarm
timingCal.set(Calendar.MINUTE, min); // alarm minute
timingCal.set(Calendar.SECOND, sec); // and alarm second
long intendedTime = timingCal.getTimeInMillis();
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, intendedTime,AlarmManager.INTERVAL_DAY, pendingIntent);
}
private void createPendingIntent(){
Intent alarmIntent = new Intent(this, MonthManager.class);
alarmIntent.setAction(alarm);
pendingIntent = PendingIntent.getBroadcast( this, 0, alarmIntent,0 );
}
Manifest.xml
<application> ...
<receiver android:name=".MonthManager">
<intent-filter>
<action android:name="com.example.aufgaben_planer.alarm"></action>
</intent-filter>
</receiver>
</application>
Еще одно примечание, которое может (или не может) быть важным:
Я никогда не отменяю регистрацию получателя (не имеет смысла для меня, потому что я объявляю это в Манифесте)