Je pense que, vous avez deux problèmes inhérents à cette approche:
AlarmManager n'acceptera pas de grands intervalles de temps parce que le nombre de Millis va déborder l'argument
Je ne pense pas que les alarmes survivra aux redémarrages de votre téléphone qui se produira très certainement pendant une si longue période de temps.
conseils I que vous stockez chaque alarme dans un endroit sûr et utiliser une combinaison de récepteurs AlarmManager et onboot pour vérifier si une des alarmes de votre liste doit être tiré ce jour-là et juste replanifier une alarme pour se réveiller vous demain si ce n'est pas le cas.
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);
}
}
Pour démarrer votre service à l'emploi du temps de démarrage ceci:
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);
}
}
Enfin ajouter à votre manifeste pour planifier votre serviceAutoLauncher être lancé à chaque démarrage:
<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>
J'ai downvoted cette réponse acceptée, parce que la réponse de Laurent est la bonne. –