如何添加app widget提供程序类

时间:2014-09-05 03:53:06

标签: android eclipse android-manifest manifest eclipse-adt

https://developer.android.com/guide/topics/appwidgets/index.html

它解释了如何在Manifest中声明它:

<receiver android:name="ExampleAppWidgetProvider" >
<intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
           android:resource="@xml/example_appwidget_info" /> </receiver>

后来它说如何添加类:

  

public class ExampleAppWidgetProvider扩展AppWidgetProvider {

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    // Perform this loop procedure for each App Widget that belongs to this provider
    for (int i=0; i<N; i++) {
        int appWidgetId = appWidgetIds[i];

        // Create an Intent to launch ExampleActivity
        Intent intent = new Intent(context, ExampleActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

        // Get the layout for the App Widget and attach an on-click listener
        // to the button
        RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.appwidget_provider_layout);
        views.setOnClickPendingIntent(R.id.button, pendingIntent);

        // Tell the AppWidgetManager to perform an update on the current app widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
} }

它说我需要将该类声明为广播接收器。

所以我的问题是:我的应用程序中有接收器,但是如何添加该类并将其声明为 广播 接收器? 如果有人用类发布了接收器的示例代码会很有帮助,所以我知道如何将它放在一起。 对不起,如果这是一个愚蠢的问题,我对这一切都不熟悉。

1 个答案:

答案 0 :(得分:1)

Right from the docs:

  

AppWidgetProvider 扩展BroadcastReceiver 以方便   用于处理App Widget广播的类。 AppWidgetProvider   仅接收 相关的广播   窗口小部件,例如更新,删除,启用和更新应用程序窗口小部件时   禁用。

换句话说:由于您的ExampleAppWidgetProvider继承自AppWidgetProvider类,因此它也是BroadcastReceiver,因为AppWidgetProvider扩展了android.content.BroadcastReceiver。因此,没有必要将您的类明确声明为广播接收器。此外,这是文档所说的(再一次):

  

您必须将AppWidgetProvider类实现声明为   使用AndroidManifest中接收器元素的广播接收器

正如我所看到的,你已经做到了。 ;)