Обновление виджета Будильник ||Run-Sleep ||Таймер обратного отсчета - PullRequest
0 голосов
/ 09 февраля 2019

У меня нет особых проблем, если бы «но» не было.

Alarmmanager:
Я создал часы виджетов Android с тикающими цифрами (TextView).Обновление виджета (галочка) с AlarmManager, минимум 60000 миллисекунд и с PendingIntent.Это работает.
Но минуты не совпадают с минутами в часах устройства.Секунды, 24 часа секунд.Большая проблема в том, что виджет не отображает время сразу после перемещения виджета на главном экране, а только имя виджета в течение до 59 секунд.
PS: часы виджета имеют вторые альтернативные часы, сболее одного тика за 24 часа в секунду.Это не является проблемой, потому что достаточно для отображения часов и минут.

Run-Sleep:
С этим я запутался в этой точке.Я помню, что это работает, в рабочем процессе, но все же, с повтором, не работает.Это раздражает.Или я не правильно помню.
С Run-Sleep это то же самое с синхронностью (минуты).Секунды такие же, как указано выше.

CountDownTimer:
Не работает.И я понятия не имею.И я слишком мало знаю по этому вопросу.

Вопрос для опроса:
Какой, возможно, лучший метод?(когда это работает).И каков будет способ отображения секунд в виджете с наилучшей ресурсосберегающей способностью?(Батарея, процессор).

package com.widget.clock

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.widget.RemoteViews;

import android.os.CountDownTimer;

import java.lang.Runnable;

public class UpdateWidget extends AppWidgetProvider {
    private PendingIntent pendingIntent;

// ###############
// THE ALARM START
// ###############
/*
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        final Intent i = new Intent(context, UpdateService.class);

//        if (pendingIntent == null) {
            pendingIntent = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
//        }
        manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 60000, pendingIntent);


// Onclick open the Main APP Window
        for (int appWidgetId : appWidgetIds) {
            Intent intent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            views.setOnClickPendingIntent(R.id.widget_content, pendingIntent);

            appWidgetManager.updateAppWidget(appWidgetId, views);
        }

    }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }
*/
// #############
// THE ALARM END
// #############


// ###################
// THE RUN-SLEEP START
// ###################
/*
    @Override
    public void onUpdate(final Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        setContentView(R.layout.widget_layout);
        Thread t = new Thread() {
            @Override
            public void run() {
                try {
                    while (!isInterrupted()) {
                        Thread.sleep(100);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                final Intent i = new Intent(context, UpdateService.class);
                                PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);

                            }
                        });
                    }
                } catch (InterruptedException e) {
                }
            }
        };
        t.start();

    private void setContentView(int widget_layout) {
    }

    private void runOnUiThread(Runnable runnable) {
    }

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

*/
// #################
// THE RUN-SLEEP END
// #################


// ########################
// THE COUNTDOWNTIMER START
// ########################
    @Override
    public void onUpdate(final Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        setContentView(R.layout.widget_layout);

        CountDownTimer t = new CountDownTimer(60000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                final Intent i = new Intent(context, UpdateService.class);
                PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
            }
            @Override
            public void onFinish() {
                final Intent i = new Intent(context, UpdateService.class);
                PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
            }
        };
        t.start();
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }
// ######################
// THE COUNTDOWNTIMER END
// ######################

}

Пожалуйста, будьте осторожны с вашими кликами, голосами и комментариями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...