Страница 1 из 1

Не обновляется виджет

Добавлено: 21 ноя 2014, 16:34
FastRus1804
Всем привет. Я решил сделать часики, но время не обновляется каждую секунду.
Хотя я указал обновление через каждую секунду.

Код: Выделить всё

 android:updatePeriodMillis="1000"


И в методе onUpdate тоже всё прописал.

Код: Выделить всё

        for (int id : appWidgetIds)
        {
        RemoteViews rv = new RemoteViews(context.getPackageName(),R.layout.widget);
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        rv.setTextViewText(R.id.tvTime,  sdf.format(new Date(System.currentTimeMillis())));
        appWidgetManager.updateAppWidget(id, rv);
        }
Время появляется только один раз и всё.

Re: Не обновляется виджет

Добавлено: 21 ноя 2014, 18:13
doter.ua
Зачем обновлять каждую сек? батарея не резиновая. Минималка 30 мин, чаще только программно, например по нажатию. В уроках есть инфа об этом.

Re: Не обновляется виджет

Добавлено: 21 ноя 2014, 18:46
FastRus1804
doter.ua писал(а):Зачем обновлять каждую сек? батарея не резиновая. Минималка 30 мин, чаще только программно, например по нажатию. В уроках есть инфа об этом.
Я же говорю у меня часы. Они время показывают они сами должны обновляться.

Re: Не обновляется виджет

Добавлено: 22 ноя 2014, 11:13
doter.ua
FastRus1804 писал(а): Я же говорю у меня часы. Они время показывают они сами должны обновляться.

Допустим юзер за сутки в сумме смотрит на виджет 2-3 мин. Для кого он будет обновляться каждую секунду остальные 23 часа 57мин ??

Re: Не обновляется виджет

Добавлено: 22 ноя 2014, 16:22
FastRus1804
doter.ua писал(а):
FastRus1804 писал(а): Я же говорю у меня часы. Они время показывают они сами должны обновляться.

Допустим юзер за сутки в сумме смотрит на виджет 2-3 мин. Для кого он будет обновляться каждую секунду остальные 23 часа 57мин ??
Но все виджет часы обновляются каждую минуту. Показывают время точь в точь я сидел проверял. Так как же тогда сделать то же самое?

Re: Не обновляется виджет

Добавлено: 25 ноя 2014, 20:17
kasperdun
FastRus1804 писал(а):
doter.ua писал(а):
FastRus1804 писал(а): Я же говорю у меня часы. Они время показывают они сами должны обновляться.

Допустим юзер за сутки в сумме смотрит на виджет 2-3 мин. Для кого он будет обновляться каждую секунду остальные 23 часа 57мин ??
Но все виджет часы обновляются каждую минуту. Показывают время точь в точь я сидел проверял. Так как же тогда сделать то же самое?
Во первых можно заметить как при длительном лежании телефона с выключенным экраном, после включения большинство виджетов часов будет показывать старое время первые секунды после включения. А значит они работают только когда включен экран, что и правильно.
А значит, это делается в коде, события включения экрана запускают работу часов. А выключение приостанавливает. Ну и обновление каждую секунду как вы понимаете за вас в этом случае никто не сделает.

Re: Не обновляется виджет

Добавлено: 03 дек 2014, 15:27
DenK

Код: Выделить всё

private static final int UPDATE_PERIOD_MS = 30000;

    @Override
    public void onEnabled(Context aContext) {
        super.onEnabled(aContext);

        AlarmManager alarmManager = (AlarmManager) aContext.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),
                UPDATE_PERIOD_MS, createPendingIntentToUpdateWidget(aContext));
    }

    @Override
    public void onDisabled(Context aContext) {
        super.onDisabled(aContext);

        AlarmManager alarmManager = (AlarmManager) aContext.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(createPendingIntentToUpdateWidget(aContext));
    }

    /**
     * Creates PendingIntent to update the widget.
     *
     * @param aContext Context.
     * @return PendingIntent to update the widget.
     */
    PendingIntent createPendingIntentToUpdateWidget(Context aContext) {
        Intent intentToUpdateWidget = new Intent(aContext, LockScreenWidgetProvider.class);
        intentToUpdateWidget.setAction(ACTION_UPDATE_WIDGET);
        return PendingIntent.getBroadcast(aContext, 0, intentToUpdateWidget, 0);
    }
Ловишь ACTION_UPDATE_WIDGET и обновляешь виджет. Do you understand me?