2017-07-29 3 views
1

アラーム時計アプリを作成しています。 AlarmManagerで設定した時刻になると、PendingIntentを設定してキャンセルし、BroadcastReceiverで受信することができます。私は最近の問題を発見しました。PendingIntentは、アラーム時刻がリアルタイムから1時間の倍数になると起動します。 - Android

これまでは、いつでもアラームを設定でき、BroadcastReceiverはその時刻に達するまでPendingIntentを「受信」しませんでした。私は、設定されるアラームがちょうど1時間以上(整数のみ)の時間離れたシナリオを決してカバーしていなかったと思います。たとえば、現在の時刻が11:54で、アラームが12:54、1:54、2:54などに設定されています。これを行うと、BroadcastReceiverはPendingIntentを受け取り、私が指定したアクションを実行しますする。

どうしてですか?分を別のものに変更すると、分は同じで、現在の時刻にアラームを設定した場合と同じように動作します。

public void scheduleAlarm(Context aContext) { 
    AlarmManager am = (AlarmManager) aContext.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(aContext, MyBroadcastReceiver.class); 

    String id = this.getId().replaceAll("[^0-9]+", "");  // this.getId returns a string such as "alarm1". We only need the "1". 

    PendingIntent alarmIntent = PendingIntent.getBroadcast(aContext, Integer.parseInt(id), intent, 0); 

    // "this" in this context is the Alarm object. So you can get the hour and minute from the timepicker used to set the alarm 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, this.getHour()); 
    calendar.set(Calendar.MINUTE, this.getMinute()); 

    long calendarTime = calendar.getTimeInMillis(); 
    am.setExact(AlarmManager.RTC_WAKEUP, calendarTime, alarmIntent); 
} 
+0

信じられない。これをチェックするには、 'am.setExact()'を呼び出す直前にロギングを追加します。これは 'calendarTime'の時間値をユーザーが読める形式で出力します。それから、その時間が本当にあなたが思う時間であることを確認してください。 –

+0

これでどこにいましたか?これはまだ問題ですか?すべてのアップデート? –

+0

申し訳ありません、ただの休暇にはい、それは何らかの理由でもう起こりません。私はアプリの新鮮なインストールを与え、それは正常に動作します。私は問題を再現できません – Michael

答えて

0

私はアラームが設定されていることを時間をチェックし、彼らはオフに行くべきではありませんので、彼らは現時点ではなかったことを確認:

これは私がアラームを設定する方法です。複数のアラームを設定しようとして、問題がまだ起きているのを確認した後、私は自分の携帯電話からアプリをアンインストールして、新しくインストールしました。後はすべて正常に機能し、正しく機能しています。

関連する問題