Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: why did the Alarm notification stop after system reboot

I am developing an android application that should fire an alarm five times a day:
- the times in each day is not constant
- after the alarm is fired I will schedule the next alarm.

My problem is : the alarm notification works for 1 day then it stops and also when the device is rebooted twice the notification doesn't work , I don't now if there is another way to do that , any help will be very appreciated!

Code: I have this function to call the broadcast reciever

public static void Start_Notifying(Context context){             
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(System.currentTimeMillis());
    cal.add(Calendar.HOUR_OF_DAY,hour);
    cal.add(Calendar.MINUTE, min);      
    Intent intent = new Intent(context,  OnetimeAlarmReceiver.class);
    intent.setAction("START_NOTIFYING");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, notify.REQUEST_CODE, intent,0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() , pendingIntent); 
    SaveAlarmManager(alarmManager, pendingIntent);

}

the code of oneTimeAlarmReciever

public void onReceive(Context context, Intent intent) {     
    main_menu.con = context;                
    Notification notifyDetails;
    NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    notifyDetails = new Notification(R.drawable.icon,s1,System.currentTimeMillis());
    PendingIntent pendingIntent = PendingIntent.getActivity(context, REQUEST_CODE, new Intent(context, prayertimes.class), 0);
    notifyDetails.setLatestEventInfo(context,s2+ notify.prayName , s3, pendingIntent);
    notifyDetails.sound=Uri.parse(PlaySound());
    nm.notify(NOTIFICATION_ID, notifyDetails);                          
    main_menu.notify_me();
}

The code of notify_me()

static void notify_me() {               
    hour =pTime.num1;
    min =pTime.num2;                
    Start_Notifying(con);
}

In the manifest file

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

<receiver class =".OnetimeAlarmReceiver" android:name="OnetimeAlarmReceiver">
    <intent-filter>
        <action android:name="START_NOTIFYING" />
        <action android:name="android.intent.action.BOOT_COMPLETED"> </action>
        <data android:mimeType="audio/ogg" />
    </intent-filter>
</receiver>
like image 252
wafa_sh Avatar asked Aug 14 '11 11:08

wafa_sh


People also ask

Does Alarm Manager persist even after reboot?

The AlarmManager service is a convenient class to schedule working on your Android application; however, when the device shuts down or reboots, all your alarms will be lost since the system does not retain them between system restarts.

What is an alarm in Android?

The alarm is an Intent broadcast that goes to a broadcast receiver that you registered with Context. registerReceiver(BroadcastReceiver, IntentFilter) or through the <receiver> tag in an AndroidManifest. xml file. Alarm intents are delivered with a data extra of type int called Intent.


1 Answers

why did the Alarm notification stop after system reboot

Because alarm schedules are cleared on a reboot. If you want to have your alarms pick up again after a reboot, you will need to implement a BroadcastReceiver that responds to the RECEIVE_BOOT_COMPLETED broadcast. The demo/ project in my WakefulIntentService repo demonstrates this.

like image 118
CommonsWare Avatar answered Sep 21 '22 11:09

CommonsWare