Alarm AlarmManager triggers immediately

I am testing AlarmManager for use in my application, and it immediately starts my broadcast receiver when I want it to fire after 1 minute. Code below:

 public class SetMealTimersActivity extends Activity { PendingIntent pi; BroadcastReceiver br; AlarmManager am; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_set_meal_timers); br = new BroadcastReceiver() { @Override public void onReceive(Context c, Intent i) { Toast.makeText(c, "Ready to Go!", Toast.LENGTH_LONG).show(); } }; registerReceiver(br, new IntentFilter("com.ian.mealtimer")); pi = PendingIntent.getBroadcast(this, 0, new Intent( "com.ian.mealtimer"), 0); am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE)); am.set( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, pi ); } 
+6
source share
5 answers

try:

  am.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+60*1000, pendingIntent); 

he works for me.

+3
source

Try changing SystemClock.elapsedRealtime() to System.currentTimeMillis() and AlarmManager.ELAPSED_REALTIME_WAKEUP to AlarmManager.RTC_WAKEUP .

0
source

Try using AlarmManager.setExact(int, long, PendingIntent) if you use the Android API> 18 or compile with API <19 because the time management for these methods has changed using API 19. Perhaps this helps. Read more.

0
source

make id for pendingIntent like this

 pendingIntent = PendingIntent.getActivity(this, 999123266, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

All examples

 public void setAlarm_sat(int dayOfWeek1) { cal1.set(Calendar.DAY_OF_WEEK, dayOfWeek); Intent intent = new Intent(this, RemmemberActivity.class); pendingIntent = PendingIntent.getActivity(this, 999123266, intent, PendingIntent.FLAG_UPDATE_CURRENT); Long alarmTime = cal1.getTimeInMillis(); AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE); am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime,7*24 * 60 * 60 * 1000, pendingIntent); // am.set(AlarmManager.RTC, cal1.getTimeInMillis(), pendingIntent); } 
0
source

If you are using an accurate alarm, make sure the time is right. Otherwise, it will work immediately.

0
source

Source: https://habr.com/ru/post/970182/


All Articles