TAGS :Viewed: 5 - Published at: a few seconds ago

[ Cannot update Android Widget using AlarmManager and Calendar ]

I want to update my widget but it simply doesn't work! I made it so that the update happens at particular time - a few minutes after I run the app, but widget doesn't get updated. I know this because I am setting the label with the System.currentTimeMillis. When app gets updated this label should have a new values. I did everything as the Android AlarmManager document told me.


So here is what I have done, in both onReceive and onUpdate of

public class CalendarWidget extends AppWidgetProvider 

More Code

Calendar todayMidnight = Calendar.getInstance();
todayMidnight.add(Calendar.DATE, 0);
todayMidnight.set(Calendar.HOUR_OF_DAY, 23);
todayMidnight.set(Calendar.MINUTE, 2);
todayMidnight.set(Calendar.SECOND, 0);

AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent (context, CalendarWidget.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);

alarm.setRepeating(AlarmManager.RTC, todayMidnight.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);



In Manifest

                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
                <action android:name="android.intent.action.TIMEZONE_CHANGED" />
                <action android:name="android.intent.action.TIME_SET" />
                <action android:name="android.intent.action.DATE_CHANGED" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />

                android:resource="@layout/calendar_widget2" />

But app doesn't get updated at 11:02PM!! This should work, right? (Just note from me updating the widget from my activities work fine. It is just alarm manager that doesn't update the widget!)

Answer 1

is CalendarWidget your receiver class?
you need a receiver class
public class AlarmReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { //Alarm received,update your widget } }

and in your activity:
Intent alarmIntent=new Intent(yourActivity.this,AlarmReceiver.class); PendingIntent pi=PendingIntent.getActivity(context,ID,intent,0); AlarmManager manager =(AlarmManager)getSystemService(Context.ALARM_SERVICE); manager.set(AlarmManager.RTC, ... ,pendingIntent);