2013-04-18 107 views
3

我遇到了觸發AppWidgetReciever的onEnabled和onDisabled方法的問題。我有指定的動作,我還記錄了onRecieve方法中的每個動作,但我得到的唯一兩個動作是「APPWIDGET_UPDATE」和「APPWIDGET_DELETED」。我已經搜索這個解決方案,但不幸的是沒有發現。這裏是我的代碼:Android onEnabled/onDisabled從未呼籲

清單部分:

<receiver android:name=".ScheduleWidgetProvider" > 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_ENABLED" /> 
       <action android:name="android.appwidget.action.APPWIDGET_DISABLED" /> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
       <action android:name="android.appwidget.action.APPWIDGET_DELETED" /> 
      </intent-filter> 
      <meta-data android:name="android.appwidget.provider" 
       android:resource="@xml/provider_xml" /> 
     </receiver> 

Provider_xml:

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="180dp" 
    android:minHeight="40dp" 
    android:updatePeriodMillis="60000" 
    android:initialLayout="@layout/widget_layout" 
    android:configure="org.zivkovic.schedule.ConfigurationActivity" 
    > 
</appwidget-provider> 

ScheduleWidgetProvider:

public class ScheduleWidgetProvider extends AppWidgetProvider { 
    { 
     Log.w("Schedule", "ScheduleWidgetProviderRequested"); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.w("Schedule", "On recieve " + intent.getAction()); 
     super.onReceive(context, intent); 
    } 

    @Override 
    public void onEnabled(Context context) { 
     Log.w("Schedule", "OnEnabled called"); 
     ... 
     super.onEnabled(context); 
    } 

    @Override 
    public void onDisabled(Context context) { 
     Log.w("Schedule", "OnDisabled called"); 

     ... 

     super.onDisabled(context); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     for (int i = 0; i < appWidgetIds.length; i++) { 
      .... 
     } 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
    } 

} 

任何幫助表示讚賞。謝謝!

回答

6

好的,從手機中刪除我的應用程序的伎倆。無法理解爲什麼卸載修復它。與任何人有同樣的問題,卸載並重新安裝你的應用程序。

+0

我有一個類似的問題,這對我工作。我敢打賭,小部件與系統更緊密地聯繫在一起,重新安裝不會影響行爲。謝謝你的提示! – pkk

+0

也爲我工作,謝謝! –

+1

它也適用於我,但爲什麼?我有這個問題只是**有時**當我安裝我的應用程序在'AndroidStudio'的設備上進行測試。我也把所有需要'意圖過濾器',但我有時看到這個問題,它需要'卸載'+'重新安裝'再次。 – RAM

2

我知道這是一箇舊帖子,但似乎問題是onReceive(Context context, Intent intent)方法。

看起來,它在處理接收者的事件時優先,防止在接收動作時調用指定的方法。

有兩種可能的解決方案;要麼在onReceive方法中處理意圖的操作,要麼刪除該方法並覆蓋指定的操作方法。

不要忘記在intent-filter中包含這些操作。

+6

在你的onReceive中,你需要首先調用super方法,才能派發onEnabled,onDisabled等。 – lukas

+0

@lukas是的,是的,是的!調用'super.OnReceive'做到了訣竅! – AlexAndro