6

私のアプリケーションは、通知システムも備えているサイトのコンテンツを表示します。新しい通知があるかどうかを表示したいのですが、AlarmManagerを呼び出すを使用していますIntentService

私の質問は、これをどこから開始/登録すればよいAlarmManagerですか? 概念実証のためだけにアクティビティに入れましたonCreate()(そして、うまく機能しています、ありがとうございます:))が、そのアクティビティを2回開始すると、複数のアラームが発生します。

私が思いついた唯一の可能な解決策はこれですが、これがベストプラクティスになるかどうかはわかりません

  • onCreate()設定の「アラーム開始」が falseの場合、マネージャーを開始します
  • 環境設定で開始される変数を設定します。

何らかの理由でアラームが停止した場合、アラームを再開する方法はありません。したがって、バリエーションは次のようになります。

  • 常にキャンセルを呼び出すonCreate()
  • そして、常にアラームを設定します。

これは一般的なパターンのようです: 定期的にアラームで情報を取得したいのに、そのアラームを複数回設定しない。どうすればいいですか?いつ、どこで、どのようにアラームを登録しますか?

また、@Zelimir のコメントを続けます:特定のアラームが既に設定されているかどうかを確認できますか?

もちろん、アクティビティが開始されているかどうかに関係なく、アラームが設定されるのが理想的ですが、それは別のことかもしれません。

完全を期すために、これは現在アラームを開始するために使用しているコードです。

AlarmManager alMan   = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i             = new Intent(this, CommentService.class);
PendingIntent penInt = PendingIntent.getService(this, 0, i, 0);

alMan.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(), 
                          AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
                          penInt);

さらに完全を期すために、アプリの説明/状況。
このアプリは基本的に、特定のページのブログ (場合によってはジャーナル) を表示しています。エントリの追加、エントリの表示、コメントの追加などのアクティビティがあります。「マザー」サイトには、通知を受信するオプションがあります (SO でメッセージを受信したときにここに表示される番号のように)。新しいメッセージがあるかどうかを表示したいので、xx 分ごとに取得します。今のところ通知バーに表示されますが、後で何らかのウィジェットにフィードする可能性があります。

さらに詳しい情報が必要な場合:アプリは Androblip と呼ばれ、blipfoto.com というサイトをサポートしています。

4

1 に答える 1

4

いつ、どこで、どのようにアラームを登録しますか?

それは抽象的に答えることは不可能です。それは、アプリのビジネスルールが何であるかに完全に依存しますが、質問で提供することを拒否しました.

監視が常に行われている場合、一般的なパターンはアラームを登録することです。

  • onCreate()アプリの最初の実行のメイン アクティビティの
  • で、名簿BOOT_COMPLETED BroadcastReceiverを消去する再起動を処理するAlarmManager

特定のアラームがすでに設定されているかどうかを確認できますか?

いいえ、問題なくキャンセルできます。同等のものを作成し、をPendingIntent呼び出すだけです。cancel()AlarmManager

于 2011-03-16T12:08:08.493 に答える