3

我有一個AppWidgetProvider,當一個小部件首次添加到主屏幕時,我需要做一些初始化。我知道做這件事的地方是在onEnabled(Context context)方法中。我的問題是,這種方法從來沒有被稱爲(據我可以在logcat中看到)。AppWidgetProvider問題

這裏是我的代碼:

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提供商的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> 

你認爲是什麼問題?

+0

CommonsWare的答案是正確的,但如果你用錯誤的代碼發揮各地,你可能要卸載該應用程序就開始工作了。 –

回答

9

您需要添加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()廣播。

+0

謝謝你......但似乎onEnabled仍然沒有被調用。我也嘗試了APPWIDGET_DELETED,但它也不起作用......我錯過了什麼? – Alex1987

+0

@ Alex1987:AFAIK,應該已經足夠了。 – CommonsWare

+0

它突然工作..我不知道發生了什麼,但它的工作原理......謝謝男人:) – Alex1987

5

不要忘了android:exported財產!我沒有收到onDelete()android:exportedfalse

<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> 
+0

+1謝謝,我只是失去了一些好時間試圖瞭解爲什麼我沒有得到通知時,我的最後一個部件被刪除... – Morfic

相關問題