Получение сигнала тревоги несколько раз - PullRequest
0 голосов
/ 11 июня 2018

Мне нужно, чтобы мой будильник срабатывал один раз в день в 11:00 и обновлял все мои виджеты.Когда я тестирую свое приложение с одним виджетом, мой метод onReceive () срабатывает несколько раз, как только приходит время, обновляя каждый виджет каждый раз.Почему это происходит?

Это мой код:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    theAppWidgetManager = appWidgetManager;
    // There may be multiple widgets active, so update all of them
    for (int appWidgetId : appWidgetIds) {
        ...
    }
    scheduleNextUpdate(context);
}

@Override
public void onReceive(Context context, Intent intent){
    if (intent.getAction().equals(ACTION_SCHEDULED_UPDATE)) {
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        int[] ids = manager.getAppWidgetIds(new ComponentName(context, AppWidget.class));
        onUpdate(context, manager, ids);
    }
    super.onReceive(context, intent);

}
private  void scheduleNextUpdate(Context context) {
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AppWidget.class);
    intent.setAction(ACTION_SCHEDULED_UPDATE);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

    // Get a calendar instance for midnight tomorrow.
    Calendar at11 = Calendar.getInstance();
    at11.set(Calendar.HOUR_OF_DAY, 11);
    at11.set(Calendar.MINUTE, 30);
    at11.set(Calendar.SECOND, 1);
    at11.set(Calendar.MILLISECOND, 0);
    at11.add(Calendar.DAY_OF_YEAR, 1);

    // For API 19 and later, set may fire the intent a little later to save battery,
    // setExact ensures the intent goes off exactly at midnight.
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        alarmManager.set(AlarmManager.RTC_WAKEUP, at11.getTimeInMillis(), pendingIntent);
    } else {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, at11.getTimeInMillis(), pendingIntent);
    }
}

1 Ответ

0 голосов
/ 11 июня 2018

Я думаю, что проблема в том, что вы планируете следующие обновления в методе onUpdate.Описание этого метода говорит, что:

Вызывается в ответ на сообщения AppWidgetManager.ACTION_APPWIDGET_UPDATE и AppWidgetManager.ACTION_APPWIDGET_RESTORED, когда этого провайдера AppWidget просят предоставить RemoteViews * для набора AppWidgets * *.1006 *

так, теоретически это может сработать несколько раз.Я думаю, вам следует либо запланировать следующие обновления в onReceive, либо проверить каким-либо образом, запланирована ли трансляция для следующего обновления.

...