为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2023-03-17 16:12:37
谁能告诉我我的广播接收器有什么问题,因为它对时间的变化没有反应?它确实调用了 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 正确调用。我可以从比我聪明的人那里得到一些建议吗?
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

似乎我试图以错误的方式调用小部件的所有实例。在我的 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)

一切都像梦一样工作;)


查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 305 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号