myślę, że masz dwa nieodłączne problemy z tego podejścia:
AlarmManager nie przyjmuje dużych odstępach czasowych, ponieważ liczba Millis wyleje argument
Nie sądzę Alarmy przetrwa ponowne uruchomienie telefonu, które na pewno nastąpi w tak długim okresie czasu.
I rada jaką można przechowywać każdy alarm w bezpiecznym miejscu i użyć kombinacji AlarmManager i onBoot odbiorników, aby sprawdzić, czy musi być zwolniony jeden z alarmów z listy tego samego dnia i po prostu przełożyć alarm obudzić wstajesz jutro, jeśli nic nie masz.
public class AlarmService extends Service {
//compat to support older devices
@Override
public void onStart(Intent intent, int startId) {
onStartCommand(intent, 0, startId);
}
@Override
public int onStartCommand (Intent intent, int flags, int startId){
//your method to check if an alarm must be fired today
checkForTodayAlarmsAndBehaveAppropriately();
//reschedule me to check again tomorrow
Intent serviceIntent = new Intent(AlarmService.this,AlarmService.class);
PendingIntent restartServiceIntent = PendingIntent.getService(AlarmService.this, 0, serviceIntent,0);
AlarmManager alarms = (AlarmManager)getSystemService(ALARM_SERVICE);
// cancel previous alarm
alarms.cancel(restartServiceIntent);
// schedule alarm for today + 1 day
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 1);
// schedule the alarm
alarms.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), restartServiceIntent);
}
}
Aby uruchomić usługę w użytku czasie startu to:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class serviceAutoLauncher extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context,AlarmService.class);
context.startService(serviceIntent);
}
}
koniec dodać to do Twojego manifest zaplanować serviceAutoLauncher być uruchomiony na każdym boot:
<receiver android:name="serviceAutoLauncher">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.HOME"></category>
</intent-filter>
</receiver>
Zignorowałem tę zaakceptowaną odpowiedź, ponieważ odpowiedź od Laurenta jest rzeczywiście poprawna. –