WidgetProvider 在没有显示小部件时接收广播

Posted

技术标签:

【中文标题】WidgetProvider 在没有显示小部件时接收广播【英文标题】:WidgetProvider receives broadcast while there is no widget displayed 【发布时间】:2011-07-20 17:15:46 【问题描述】:

android Widget API 有一些我真的不明白的地方。

我编写了一个带有配置 Activity 的小部件,每次使用 adb 安装应用程序时,即使小部件未显示,也会调用 WidgetProvider.onUpdate()。而且有时还有多个appWidgetIds,还有配置Activity启动的时候。

onUpdate 方法中,我检查了appWidgetManager.getAppWidgetIds() 的值,它返回0 个项目。

public class FlickrWidget
    extends AppWidgetProvider


    /**
     * @see android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[])
     */
    @Override
    public void onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds )
    
        Log.d( "FlickrWidget: Start onUpdate with " + appWidgetIds.length + " widgets" ); 

        int[] appWidgetIds2 = appWidgetManager.getAppWidgetIds( new ComponentName( context, FlickrWidget.class ) );
        Log.d( "FlickrWidget: installed : " + appWidgetIds2.length + " widgets" ); //display 0 items
        for ( int i = 0; i < appWidgetIds2.length; i++ )
        
            Log.d( "FlickrWidget : installed appWidgetId = " + appWidgetIds2[i] );
        

        for ( int i = 0; i < appWidgetIds.length; i++ )
        
            Log.d( "FlickrWidget : appWidgetId = " + appWidgetIds[i] ); // can have multiple items
        
    

我不明白,因为我虽然:

    AppWidgetProvider 仅在显示一个或多个小部件时接收广播。 配置为Activity 的小部件不会随着启动时的广播而更新。 在onUpdate 中调用appWidgetManager.getAppWidgetIds() 应该返回与参数中的appWidgetIds 相同的int 数组。

在我实验时,所有这 3 个点都是错误的......

有人可以帮我吗?

提前致谢

【问题讨论】:

【参考方案1】:

最后我在 Android Google Groups 上重复了这个问题,一个好人回答我 developer.android.com 上的 Widget api 文档已过时...

https://groups.google.com/d/topic/android-developers/HfD-ojjsuso/discussion

【讨论】:

以上是关于WidgetProvider 在没有显示小部件时接收广播的主要内容,如果未能解决你的问题,请参考以下文章

小部件的多个实例仅更新最后一个小部件

OnUpdate() 未调用小部件服务

Android小部件上的线程

防止触发 WidgetProvider 的 onUpdate

Android:多个 AppWidgets - 一个清单条目

主屏幕小部件 BroadcastReceiver 可以监听电话事件吗?