Julián Oviedo
Julián Oviedo

Reputation: 730

Android Studio AlarmManager is not running at the specific time

This is the code for the alarm manager:

protected void alarmInit(){
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 25);

    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Intent alarmIntent = new Intent(this, SampleBootReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, alarmIntent, 0);

    manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pendingIntent);
}

This is the Broadcast class:

    public class SampleBootReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {

                Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_LONG).show();

                intent = new Intent(context, NotificationService.class);
                PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);

                NotificationCompat.Builder builder = new NotificationCompat.Builder(
                        context)
                        // Set Icon
                        .setSmallIcon(R.drawable.icono)
                        // Set Ticker Message
                        .setTicker("message")
                        // Set Title
                        .setContentTitle("asdf")
                        // Set Text
                        .setContentText("message")
                        // Add an Action Button below Notification
                        // Set PendingIntent into Notification
                        .setContentIntent(pIntent)
                        // Dismiss Notification
                        .setAutoCancel(true);

                // Create Notification Manager
                NotificationManager notificationmanager = (NotificationManager) context
                        .getSystemService(Context.NOTIFICATION_SERVICE);
                // Build Notification with Notification Manager
                notificationmanager.notify(0, builder.build());
            }
        }
    }
}

But at the set time I do not receive any message (I don't see the Toast message with the word Hello). Also, in Manifest XML I set inside aplication tag:

<receiver android:name=".Home$SampleBootReceiver"
        android:enabled="false"
        tools:ignore="Instantiatable">

The class SampleBootReceiver is a public class in Home class

Could you please help me with this? Thanks in advance

Upvotes: 1

Views: 239

Answers (1)

tyczj
tyczj

Reputation: 73721

You are using setInexactRepeating so the OS will decide when to fire your alarm. The OS tries to group together alarms to save battery.

Beginning with API 19 (Build.VERSION_CODES.KITKAT) alarm delivery is inexact: the OS will shift alarms in order to minimize wakeups and battery use. There are new APIs to support applications which need strict delivery guarantees; see setWindow(int, long, long, android.app.PendingIntent) and setExact(int, long, android.app.PendingIntent). Applications whose targetSdkVersion is earlier than API 19 will continue to see the previous behavior in which all alarms are delivered exactly when requested.

https://developer.android.com/reference/android/app/AlarmManager

Upvotes: 1

Related Questions