【问题标题】:How test onUpdate method of my widget not waiting 30min如何测试我的小部件的 onUpdate 方法不等待 30 分钟
【发布时间】:2011-07-24 14:47:37
【问题描述】:

在学习了 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);
    }

【问题讨论】:

    标签: android widget onupdate


    【解决方案1】:

    这可能会有所帮助:

    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);
    
    }
    

    在 AppWidgetProvider 的 onEnabled() 方法中调用 setAlarm() 函数。

    【讨论】:

    • 不要忘记在 AppWidgetProvider 的 onDisabled() 方法中调用 AlarmManager.cancel(),否则即使在最后一个小部件被移除后,您的闹钟也会继续响起!
    【解决方案2】:

    我在这里写了一个答案Android: How do I force the update of all widgets of a particular kind,它允许你的小部件在被点击时被更新。这可以让您更好地控制何时执行更新。

    【讨论】:

      【解决方案3】:

      你应该简单地修改你的“widget.xml”文件:

      android:updatePeriodMillis="15000"
      

      这将导致它在 15 秒内触发。该数字以毫秒为单位,即 1000ms=1sec...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-21
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多