シナリオ1:
- デバイスがロードされます
- 最初のウィジェットを追加します
- OneX- >呼び出しonEnabled| GalaxyTab- >はonEnabledを呼び出しません。
シナリオ2:
- デバイスは、ウィジェットがすでに画面に表示された状態で起動されます。
- OneX- >呼び出しonEnabled| Galaxyタブ->CallsonEnabled
ただし、ユーザーが画面に1つ配置したときに呼び出す必要があります(シナリオ1)。それ以外の場合は重要です。確かに、onEnabledを呼び出すためにデバイスを再起動する必要はありません。
アラームマネージャーを接続してウィジェットを2秒ごとに更新するため、これは重要です。
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 1);
alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 1000, createClockTickIntent(context));
実用的な解決策がない同様の質問があります:AppWidgetProvider:onEnabledメソッドが呼び出されていません
これらのインテントを登録する必要はありません。登録しても役に立ちません。
私の質問は、なぜonEnabledが呼び出されないのか、そしてどうすればそれを取得できるのかということです。
それはグーグルドキュメントで言う:ACTION_APPWIDGET_ENABLED:
AppWidgetのインスタンスが初めてホストに追加されたときに送信されます。このプロバイダーのインスタンスとともにAppWidgetHostがインストールされている場合、このブロードキャストは起動時に送信されます。
基本的に、両方のシナリオで機能することを確認します
これは、onEnabled()をトリガーするインテントです。
このプロバイダーのAppWidgetがインスタンス化されたときに、ACTION_APPWIDGET_ENABLEDブロードキャストに応答して呼び出されます。このメソッドをオーバーライドして、独自のAppWidget機能を実装します。
タブレットではなく電話で動作するという事実は奇妙です。これはAndroid3.2の問題ですか、回避策はありますか?