Android Alarm reset after reboot not working

853 Views Asked by At

I have one class called StopAlarmReceiver and another BootHandler.

The BootHandler resets the alarm after reboot, which was set before the boot. My problem is that the BootHandler sets the alarm but not getting fired.

Entries in Manifest file.

    <receiver
        android:name="com.sign.android.myscheduler.app.StopAlarmReceiver"
        android:enabled="true"
        android:exported="true" >
    </receiver>

    <receiver
        android:name="com.sign.android.myscheduler.app.BootHandler"
        android:enabled="true"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

Code in BootHandler.

AlarmManager mgr= (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, StopAlarmReceiver.class);
PendingIntent pi = PendingIntent.getService(context, 1, i, 0);

long time = sharedPreferences.getLong("Old_time", 0);
Log.e(TAG, "New time: " +new Date(SystemClock.elapsedRealtime() + time));

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + time, 5000, pi);
1

There are 1 best solutions below

0
On

manifest just write two receivers 1 for alarm and 1 for handle the boot

  <receiver
        android:name="packagename.AlarmReceiver"

        >

    </receiver>

    <!-- Will not be called unless the application explicitly enables it -->
     <receiver android:name="com.avion.contact_app.DeviceBootReceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

add following permissions

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />


<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

In DeviceBootReceiver class check the intent action first

@Override
public void onReceive(Context context, Intent intent) {
    SharedPreferences prefs = context.getSharedPreferences(
            "DefaultReminder", context.MODE_PRIVATE);

    if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))

    {
//do whatever you want after reboot or fire alarm again
}
}