WidgetProvider在没有显示小部件的情况下接收广播

时间:2011-03-22 17:48:45

标签: android android-widget broadcastreceiver

使用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
        }
    }
}

我不明白,因为我:

  1. AppWidgetProvider仅在显示一个或多个窗口小部件时才接收广播。
  2. 配置为Activity的窗口小部件在启动时未使用广播进行更新。
  3. appWidgetManager.getAppWidgetIds()中调用onUpdate应返回与参数中的appWidgetIds相同的int数组。
  4. 当我试验所有这三个点都是假的时候......

    有人可以帮助我吗?

    提前致谢

1 个答案:

答案 0 :(得分:1)

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

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