3

私はAppWidgetProviderを持っており、ホームスクリーンにウィジェットが最初に追加されたときに初期化を行う必要があります。私はそれを行う場所がonEnabled(コンテキストコンテキスト)メソッドにあることを理解しています。私の問題は、このメソッドが呼び出されないことです(私が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の答えが正しいですが、障害のあるコードをいじってきた場合、あなたはおそらく、それが作業を開始する前のアプリをアンインストールする必要がありますしたとき、私はonDelete()を受信しませんでした。 –

答えて

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を忘れないでください! 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

関連する問題