Проблема с AppWidgetProvider

У меня есть AppWidgetProvider, и мне нужно сделать некоторую инициализацию, когда виджет сначала добавляется на главный экран. Я понимаю, что место для этого – в методе onEnabled (контекстный контекст). Моя проблема в том, что этот метод никогда не вызывается (насколько я вижу в логарифме).

Вот мой код:

public class MyMonitorWidget extends AppWidgetProvider{ @Override public void onEnabled(Context context) { super.onEnabled(context); Log.v("LOG", "Widget onEnabled"); Intent intentToFire = new Intent(UpdateAlarmReceiver.ACTION_UPDATE_ALARM); context.sendBroadcast(intentToFire); } ... } 

И мой appwidget-provider xml:

 <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget_layout" android:minWidth="146dp" android:minHeight="74dp" android:label="Monitor Widget" /> 

И в манифесте:

 <receiver android:name="MyMonitorWidget" android:label="Monitor Widget"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <intent-filter> <action android:name="com.android.myMonitor.ACTION_NOTIFY_WIDGET"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/monitor_widget_info"/> </receiver> 

Как вы думаете, в чем проблема?

Вам нужно добавить android.appwidget.action.APPWIDGET_ENABLED как другое действие:

  <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="android.appwidget.action.APPWIDGET_ENABLED" /> </intent-filter> 

Без этого вы не получите трансляцию, которая запускает onEnabled() .

Не забывайте о android:exported недвижимость! Я не получил onDelete() когда android:exported onDelete() был false

 <receiver ... android:exported="true" ... > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="android.appwidget.action.APPWIDGET_DELETED" /> <action android:name="android.appwidget.action.APPWIDGET_ENABLED" /> <action android:name="android.appwidget.action.APPWIDGET_DISABLED" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource=... /> </receiver>