2012-02-27 9 views
0

トリガーのアラーム登録と開始サービスの質問のカップル。Androidのアラームとサービスのトリガー

  1. アラームが先に現在の時刻の分のカップルに設定され、その後場合は電話が予定時間後の次の携帯電話のスイッチでアラームのトリガが渡されますが、スイッチをオフに作られている場合は?

  2. 保留中のインテントをキャンセル/更新するにはどうすればよいですか? startCommand()サービス方法のリクエストコードを取得するには?

  3. アラームが10秒ごとにトリガされると、複数のサービスインスタンスが作成されますか?

+0

"キャンセル/更新保留中のインテント" - 理由は何ですか? – Olegas

答えて

1
  1. 「オフ」ダウンだけではなく、答えは「いいえ」は

  2. は、私はあなたがいないことができると思いません「一度すぐに画面をオフにするには、電源ボタンを押して」フルパワーを意味している場合リクエストコードを取得する。 getServiceのドキュメントのとおり、requestCodeフィールドは「現在使用されていません」です。すべてのデータをIntentで渡す必要があります(getServiceの3番目の引数)。

は、このメソッドを呼び出すたびに、対象サービスのonStartCommand(テント、int型、int)メソッドの

+0

あなたの入力にオレガスがありがとう – Ravibhushan

1
  1. ストア時間に対応するコールになります)http://developer.android.com/reference/android/content/Context.html#startService(android.content.Intentを参照してください。 SharedPreferencesのアラーム。その後、android.intent.action.BOOT_COMPLETEDのレシーバを登録し(マニフェストにandroid.permission.RECEIVE_BOOT_COMPLETEDのアクセス許可を追加することを覚えておいてください)、起動時に実行されるレシーバで、アラームがSharedPreferencesにあるかどうか、そうであれば、まだ経過していない場合はリセットするか、時間が既に経過している場合は何をすべきかを決めることができます。

  2. は、サービスののonCreateは一度だけ呼び出されますproblem with cancel the alarm manager pending intent

  3. 番号を参照してください。そのonStartとonStartCommandは毎回呼び出されます。私が開発しています自分のアプリから

0
  1. アラームが電話をオフにする時間に設定されている場合、それは上の/ boot次の携帯電話上で実行されています。これは、BOOT_COMPLETEDが存在するレシーバーなしです。これが期待される動作であるかどうか、または電話機の種類によって一貫しているかどうかはわかりません。

    アラームを指定した時刻に実行させたい場合は、WakeLockでgetBroadcast PendingIntentを使用する必要があります。他の種類のPendingIntentは、電話機がシャットダウンするまで長く起きていることを保証しませんもう一度。これはCommonsWareの別の投稿からの情報であり、私はそれを見つけてリンクしようとします。

    PendingIntentは、あなたがしようとしている本来の意図とまったく作成されている

    public void unregisterEvent(PendingIntent sender) { ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).cancel(sender); }

    :私はあなたが、たとえば、などの機能を使用して、アラームマネージャに送信pendingintentを削除することができると信じて

  2. 除去する。あなたは再びAlarmManagerを呼び出すときに新しいPendingIntentと一緒に正しいIDを供給することによって、それを更新することができます

    AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

    これは私がPendingIntentを再構築/作成するために使用するものです。

    PendingIntent.getService(this, uniqueIndexToIntent, theIntentItself, PendingIntent.FLAG_UPDATE_CURRENT);

    flagはインテントがすでに存在する場合はそれを更新し、そうでない場合は新しいものを作成します。

  3. 私はそう思わないでしょう。しかし、バッテリーの使用量を最小限に抑えるために、サービスを終了してからサービスをstopSelf()に呼び出すことをおすすめします。何もする必要がなければ走らせる必要はありません!