为什么我的 updateAppWidget 方法对所有操作都没有反应?

谁能告诉我我的广播接收器有什么问题,因为它对时间的变化没有反应?它确实调用了 updateAppWidget 方法,因为我正在显示 Toast 消息,但时钟小部件不更新时间。

我已经尝试了来自 stackoverflow 的无数解决方案,包括为 TIME_TICK、TIME_CHANGED、TIME_ZONE_CHANGED 添加意图过滤器操作,但到目前为止我没有运气。我知道我真的接近一个合适的解决方案,但我需要有人指出正确的方向。

我的 BroadcastReceiver 类代码:


package com.vulterey.nixieclockwidget;


import android.appwidget.AppWidgetManager;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;



public class Synchronize_Time extends BroadcastReceiver {



    @Override

    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();


        Bundle extras = intent.getExtras();

        if (extras != null) {

            int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);

            if (appWidgetId != -1) {


                if ((action.equals(Intent.ACTION_TIME_TICK)) ||

                        (action.equals(Intent.ACTION_TIME_CHANGED)) ||

                        (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) ||

                        (action.equals(Intent.ACTION_POWER_CONNECTED))) {


                    NixieClock.updateAppWidget(context, AppWidgetManager.getInstance(context), appWidgetId);



                }


            }

        }

    }

}

当小部件启动时,时间设置正确,显然 updateAppWidget 方法启动,但我通过更改充电/不充电状态从 BroadcastReceiver 类调用它我收到 Toast 消息但保持不变,而逻辑上它应该更新为 updateAppWidget 函数是从 BroadcastReceiver 正确调用。我可以从比我聪明的人那里得到一些建议吗?


RISEBY
浏览 306回答 1
1回答

慕无忌1623718

似乎我试图以错误的方式调用小部件的所有实例。在我的 AppWidgetProvider 类中将代码添加到 onUpdate 方法之后:ComponentName thisWidget = new ComponentName(context,            NixieClock.class);    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);并在 BroadcastReceiver 类代码中更改为:        Bundle extras = intent.getExtras();    if (extras != null) {        int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);        if (appWidgetId != -1)到:        ComponentName thisWidget = new ComponentName(context,            NixieClock.class);    int[] allWidgetIds = AppWidgetManager.getInstance(context).getAppWidgetIds(thisWidget);    for (int appWidgetId : allWidgetIds)一切都像梦一样工作;)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java