1

Based on this tutorial I've created a modified version of my own widget. Problem is now that the AlarmManager.setRepeating is not firing the intent in intervals. It seems to me that the Reciever isn't even receiving that Intent.

To be more precise, I have

  • WidgetActivity extending AppWidgetProvider
  • WidgetUpdate extending IntentService
  • WidgetAlarmReceiver extending BroadcastReceiver

WidgetActivity correctly fires WidgetUpdate class in which I have that AlarmManager who has to communicate with BroadcastReceiver in intervals (30sec) when the widget is on active screen.

WidgetUpdate.class

public class WidgetUpdate extends IntentService{
public WidgetUpdate() {
    super(null);
}

public static int UPDATE_FREQUENCY_SEC = 30;

@Override
public void onCreate() {
    super.onCreate();
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    PendingIntent alarmIntent = alarmIntent();

    long timeToRefresh = SystemClock.elapsedRealtime() + UPDATE_FREQUENCY_SEC * 1000;
    alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
                                     timeToRefresh,
                                     UPDATE_FREQUENCY_SEC * 1000,
                                     alarmIntent);
}
private PendingIntent alarmIntent() {
    Intent intentToFire = new Intent(WidgetAlarmReceiver.ACTION_REFRESH_ALARM);
    PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);
    return alarmIntent;
}
@Override
protected void onHandleIntent(Intent intent) {
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

    if (!pm.isScreenOn()) {
        cancel();
    }
    else {
        WidgetActivity widget = new WidgetActivity();
        widget.updateWidget(getBaseContext());
    }

}

WidgetAlarmReceiver.class

public class WidgetAlarmReceiver extends BroadcastReceiver{

public static final String ACTION_REFRESH_ALARM =
        "WidgetAlarmReceiver.ACTION_REFRESH_ALARM";

@Override
public void onReceive(Context context, Intent intent) {
    WidgetActivity.startWidgetUpdateService(context);
}
}

BroadcastReceiver doesn't start that update service and I'm not sure why.

edit: In manifest:

<receiver android:name="WidgetAlarmReceiver">
        <intent-filter>
           <action android:name="WidgetAlarmReceiver.ACTION_REFRESH_ALARM" />
        </intent-filter>
</receiver>
Beemo
  • 441
  • 6
  • 18
  • Solution found here http://stackoverflow.com/questions/7508179/appwidget-alarmmanager-not-updating. – Beemo Mar 14 '13 at 22:28

0 Answers0