0

コードの最後の変更後、「タイマーレシーバー」は機能しますが、そうではありません...

マネージャーを起動してレシーバーを呼び出すと、数時間後に AlarmManager が停止します。

AlarmManager が実行されているかどうかを確認するコードがアプリにあり、実行されていると表示されていますが、Receiver は呼び出されません。

ここに私のコード:

  private AlarmManager alarmMgr;
  private PendingIntent checkPendingIntent;

  public void initTimer()
  {
    this.alarmMgr = (AlarmManager)this.main.getSystemService(Context.ALARM_SERVICE);

    this.alarmActive = (PendingIntent.getBroadcast(this.main, 0,
        new Intent(this.main, AlarmReceiver.class), PendingIntent.FLAG_NO_CREATE) != null);
    this.checkPendingIntent = PendingIntent.getBroadcast(this.main, 0,
                  new Intent(this.main, AlarmReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
  }

  public void startTimer(String frequency)
  {
    Calendar now = Calendar.getInstance();
    Calendar calendar = Calendar.getInstance();
    long millis = 0;

    if(frequency.compareTo("1HOUR") == 0)
      millis = AlarmManager.INTERVAL_HOUR;
    if(frequency.compareTo("12HOUR") == 0)
      millis = AlarmManager.INTERVAL_HALF_DAY;
    if(frequency.compareTo("1DAY") == 0)
      millis = AlarmManager.INTERVAL_DAY;
    if(frequency.compareTo("1WEEK") == 0)
      millis = 7 * AlarmManager.INTERVAL_DAY;

    calendar.setTimeInMillis(System.currentTimeMillis());
    if(calendar.before(now))
      calendar.add(Calendar.DATE, 1);

    if(!this.timerSet)
      Logger.debug("Starting update checker (" + frequency + ")");
    else
      Logger.debug("Restarting update checker (" + frequency + ")");
    this.timerSet = true;
    this.alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        millis, this.checkPendingIntent);
  }

まあ、this.alarmActive は true なので、うまくいくと思っていました。もちろん、メソッド startTimer が再度呼び出されることはありません。しかし、電話とサーバーのログで確認できます(受信者はHTTPリクエストを送信するだけです)、受信者は呼び出されません...

誰かが私に言うことができますか、私は何を間違っていますか?

どうもありがとう
ルカ・ベルトンチェロ

4

0 に答える 0