Как проверить метод onUpdate моего виджета не ждет 30 минут - PullRequest
5 голосов
/ 24 июля 2011

После 3 дней изучения виджетов, я наконец понял, что такое setOnClickPendingIntent, RemoteViews ... и я сделал свой виджет. Это было сделано с помощью множества учебных пособий. Но теперь я хотел бы проверить, работает ли это. Как я читал, минимальная скорость обновления составляет 30 минут. И другой способ использует AlarmManager. Но я не могу найти ни одного примера с AlarmManager. После того, как я ждал 30 минут, ничего не произошло. Я изменил некоторые вещи и все еще жду, что это изменится ...

Есть ли способ проверить это быстрее?

 <?xml version="1.0" encoding="utf-8" ?>
    <appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="65dip"
    android:minHeight="30dip"

    android:updatePeriodMillis="180000"
    android:initialLayout="@layout/main" />

CountWidget

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

public class CountWidget extends AppWidgetProvider {
    private static final int[] IMAGES = { R.drawable.die_1, R.drawable.die_2,
            R.drawable.die_3, R.drawable.die_4, R.drawable.die_5,
            R.drawable.die_6 };
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        ComponentName me = new ComponentName(context, CountWidget.class);

        appWidgetManager
                .updateAppWidget(me, buildUpdate(context, appWidgetIds));

        // обновляем виджет
        // appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

    }

    private RemoteViews buildUpdate(Context context, int[] appWidgetIds) {

        // Создаем новый RemoteViews
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.main);

        remoteViews.setImageViewResource(R.id.left_die, IMAGES[(int) (Math
                .random() * 6)]);

        // Подготавливаем Intent для Broadcast
        Intent configIntent = new Intent(context,
                CountWhatYouWantActivity.class);
        configIntent.setAction(ACTION_WIDGET_CONFIGURE);

        // создаем наше событие
        PendingIntent configPendingIntent = PendingIntent.getActivity(context,
                0, configIntent, 0);

        // регистрируем наше событие

        remoteViews.setOnClickPendingIntent(R.id.left_die, configPendingIntent);
        return (remoteViews);
    }

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Это может помочь:

private static Intent updateIntent = new Intent();
{
    updateIntent.setAction(WidgetProvider.ACTION_WIDGET_UPDATE);
    updateIntent.setData(Uri.withAppendedPath(Uri.parse(WidgetProvider.URI_SCHEME + "://widget/id/"), ""));
}

private void setAlarm(Context context) {
    PendingIntent newPending = PendingIntent.getBroadcast(context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Time now = new Time();
    now.setToNow();
    long nowMillis = now.toMillis(false);
    long nextMillis = ((nowMillis / 60000) * 60000) + 60000;

    AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    // set the repeating real time clock minute synchronised alarm
    alarms.setRepeating(AlarmManager.RTC_WAKEUP, nextMillis, 60 * 1000, newPending);

}

Вызовите функцию setAlarm () в вашем методе onEnabled () AppWidgetProvider.

0 голосов
/ 15 сентября 2014

Вы должны просто изменить свой файл "widget.xml":

android:updatePeriodMillis="15000"

Это заставит его выстрелить через 15 секунд. Число указывается в миллисекундах, т. Е. 1000 мс = 1 с ...

0 голосов
/ 29 ноября 2011

Я написал ответ здесь Android: Как принудительно обновить все виджеты определенного вида , которые позволяют обновлять ваш виджет при каждом нажатии.Это может дать вам больший контроль над выполнением обновления.

...