Search code examples
androidandroid-notificationsandroid-alarms

Sometimes my Notification not shows


Why does my Notification sometimes not showing?

I create setRecurringAlarm(this); in MainActivity and I would like to use this code to show the notification every 30 minutes

This is my code:

private void setRecurringAlarm(Context context) {
    Log.d("MyService", "setRecurringAlarm() activated...");
        Calendar updateTime = Calendar.getInstance();
        updateTime.setTimeZone(TimeZone.getDefault());
        updateTime.set(Calendar.HOUR_OF_DAY, 12);
        updateTime.set(Calendar.MINUTE, 30);
        Intent downloader = new Intent(context, MyStartServiceReceiver.class);
        downloader.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, downloader, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
   }

And this is my MyStartServiceReceiver :

public class MyStartServiceReceiver extends BroadcastReceiver {
       @Override
        public void onReceive(Context context, Intent intent) {
        Intent dailyUpdater = new Intent(context, MyService.class);
        context.startService(dailyUpdater);
        Log.d("AlarmReceiver", "Called context.startService from AlarmReceiver.onReceive");
       }
    }

This is my MyService :

public class MyService extends IntentService {
    public MyService() {
       super("MyServiceName");
    }
    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d("MyService", "Execute MyTask");
        new MyTask().execute();
        this.sendNotification(this);
    }
    private class MyTask extends AsyncTask<String, Void, Boolean> {
        @Override
         protected Boolean doInBackground(String... strings) {
               Log.d("MyService", "Calling doInBackground() in MyTask");
               return false;
        }
    }        
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void sendNotification(Context context) {
        Log.d("MyService", "Execute sendNotification()");
        // here is my notification code --> http://stackoverflow.com/questions/20558619/how-to-set-notification-to-clear-itself-on-click  

     }
}

Solution

  • You are not using wakelock in your IntentService. There is no gaurantee that your phone will be awake because BroadcastReciever will return immediately. You need to have wakelock in your IntentService

    Check this out

    AlarmManager.setRepeating - Service does not seem to repeat