私のアプリでは、AlarmManager
クラスを使用してアラームを設定します。モバイルの再起動後にアラームをトリガーするには、 を使用しBroadcastReceiver
ました。すべて正常に動作し、定期的にアラームがトリガーされます。この場合、問題が発生します。
現在の時刻が午後 2 時 30 分で、アラームを午後 2 時 35 分に設定したとします。その後、携帯の電源を切ります。モバイルの電源を入れて 1 時間経っても、アラームが設定されている時刻としてアラームがポップアップしません。これは、現在の時刻がアラームを設定した時刻を超えているために発生しています。この問題を解決するには、どうすればよいですか。AlarmManager
クラスでアラームを設定するためのコードを投稿しました。これを解決するのを手伝ってください
public class AlarmReceiver extends BroadcastReceiver {
@SuppressWarnings("static-access")
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Intent myIntent = new Intent(context, MyAlarmService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, i, myIntent, i);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MILLISECOND, (int) Utilities.diff(NoteManager.getSingletonObject().getAlarmTime(i)));
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
}
}
public static long diff(Date date) {
long difference = 0;
try {
// set current time
Calendar c = Calendar.getInstance();
difference = date.getTime() - c.getTimeInMillis();
if (difference < 0) {
// if difference is -1 - means alarm time is of previous time then current
// then firstly change it to +positive and subtract form 86400000 to get exact new time to play alarm
// 86400000-Total no of milliseconds of 24hr Day
difference = difference * -1;
difference = 86400000 - difference;
}
}
catch (Exception e) {
e.printStackTrace();
}
return difference;
}
マニフェスト ファイル内
<receiver android:name=".AlarmReciever">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />