AppWidget alarmmanager没有更新

Nic*_*ick 9 android android-widget alarmmanager android-intent

所以,我有一个小部件,我希望它每60秒更新一次.当小部件首次添加到主屏幕时,它会正常运行其更新功能.除此之外,它应该启动一个AlarmManager,它将每60秒重新运行一次更新方法.这是它似乎没有真正做的部分.这是我的代码:

public class ClockWidget extends AppWidgetProvider {

    public static String CLOCK_WIDGET_UPDATE = "com.nickavv.cleanwidget.CLEANCLOCK_UPDATE";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]) {
        final int N = appWidgetIds.length;
        for (int i = 0; i < N; i++) {
            int appWidgetId = appWidgetIds[i];
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.clocklayout);
            appWidgetManager.updateAppWidget(appWidgetId, views);
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }

    public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
        Log.d("log","Entered update cycle");
        //Unimportant for these purposes
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }


    private PendingIntent createClockTickIntent(Context context) {
        Intent intent = new Intent(CLOCK_WIDGET_UPDATE);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
        return pendingIntent;
    }

    @Override
    public void onEnabled(Context context) {
        super.onEnabled(context);
        Log.d("onEnabled","Widget Provider enabled.  Starting timer to update widget every minute");
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 60000, createClockTickIntent(context));
    }

    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        Log.d("onDisabled", "Widget Provider disabled. Turning off timer");
        AlarmManager alarmManager = (AlarmManager) context
        .getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(createClockTickIntent(context));
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        Log.d("onReceive", "Received intent " + intent);
        if (CLOCK_WIDGET_UPDATE.equals(intent.getAction())) {
            Log.d("onReceive", "Clock update");
            // Get the widget manager and ids for this widget provider, then
            // call the shared
            // clock update method.
            ComponentName thisAppWidget = new ComponentName(context.getPackageName(), getClass().getName());
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
            int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget);
            for (int appWidgetID: ids) {
                updateAppWidget(context, appWidgetManager, appWidgetID);
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我在这个问题上发现的一些教程的产物,以及我自己对Android的了解.根据我的记录,它永远不会到达Log.d("onReceive","Clock update"); 线.是的,我的Manifest设置了时钟更新意图.谢谢!

编辑:其他信息.我在createClockTickIntent方法中放了一个日志行,然后它就会触发.所以我想这意味着我的应用程序正在运行alarmManager.setRepeating行,不知道为什么实际上并没有重复.

Nic*_*ick 3

Arggghhh,这是一个简单的拼写错误。意图过滤器是“com.nickavv.cleanwidgets.CLEANCLOCK_UPDATE”,我写了“com.nickavv.cleanwidget.CLEANCLOCK_UPDATE”

多么痛苦,但是嘿,现在我知道了。

所以,对于任何与我有类似问题的人来说,这个故事的寓意是:检查你的拼写!检查两次,或者十次。一切尽在不言中!

  • 或者总是复制/粘贴:-)(谢谢你的问题,顺便说一句!看看你是如何做到这一点的,这非常有帮助) (2认同)