Мой виджет должен обновлять свои текстовые просмотры каждый день в 0:00. В widget_provider.xml я установил android: updatePeriodMillis = "1000", но я прочитал, что минимальный период обновления составляет 30 минут, и я должен использовать alarmManager для этого. Поэтому я хочу сигнал тревоги, который запускает обновление каждый день в 0:00. UpdateService.class обрабатывает обновление (устанавливает тексты для текстовых представлений на основе даты. Класс не вызывается примерно через полчаса после полуночи)
В методе public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
я использую этот код:
Intent intentN = new Intent(context, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentN, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendarN = Calendar.getInstance();
calendarN.setTimeInMillis(System.currentTimeMillis());
calendarN.add(Calendar.HOUR_OF_DAY, 20);
calendarN.add(Calendar.MINUTE, 44);
calendarN.add(Calendar.SECOND, 5);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarN.getTimeInMillis(), 7000, pendingIntent);
(сейчас пытаюсь узнать фактическое время)
Это правильное место для этого кода? Почему это не работает? Я использую тост-сообщения в UpdateService.java, но я никогда не получаю тост в методе onStart(Intent intent, int startId)
, кроме первого раза, когда приложение установлено.
Заранее спасибо
Обновление
С помощью, вероятно, kevin, я переписываю код. Я попробовал этот код в Activity, и он работает:
Intent myIntent = new Intent(MainActivity.this, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 8000, pendingIntent);
Toast.makeText(MainActivity.this, "Start Alarm", Toast.LENGTH_LONG).show();
Однако, если я изменю его для класса AppWidgetProvider (и положу его туда), он не будет работать. Я никогда не получаю тост сообщения:
Intent myIntent = new Intent(context, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(System.currentTimeMillis());
calendar2.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(), 8000, pendingIntent);
Toast.makeText(context, "Start Alarm", Toast.LENGTH_LONG).show();