4

シナリオ1:

  1. デバイスがロードされます
  2. 最初のウィジェットを追加します
  3. OneX- >呼び出しonEnabled| GalaxyTab- >はonEnabledを呼び出しません。

シナリオ2:

  1. デバイスは、ウィジェットがすでに画面に表示された状態で起動されます。
  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の問題ですか、回避策はありますか?

4

2 に答える 2

1

なぜこのように振る舞うかを見つけようと何度も試みた後、私は不足しました。

これは、Android に関連する問題か、ウィジェット対応のブロードキャストが送信されないデバイスに関連する問題のいずれかです。

ウィジェットをアラーム マネージャーで更新するための唯一の回避策は、独自のメソッドからアラーム マネージャーを初期化し、それをonEnabledANDから呼び出すことonUpdateでした。そのため、ウィジェットが自分自身を更新するとき (アプリ呼び出しで) に達しない場合は、onEnabledによってカバーされます。onUpdateこのシナリオでonEnabledは、onUpdate が呼び出されるたびに、既存のアラーム マネージャーが新しいインスタンスに置き換えられます。

onEnabledで何をしようとしているのかによっては理想的な解決策ではないかもしれませんが、私が見つけた唯一の解決策です。

于 2012-10-08T10:36:42.973 に答える
0

また、これは非常に信頼性が低いことがわかり、ブート完了イベントのブロードキャスト リスナーを使用してこの問題を回避しました。他のコールバック (onUpdate() など) を試すこともできます。

于 2012-10-08T06:33:30.960 に答える