2013-07-30 6 views
2

Je souhaite créer une diffusion AlarmManager (répétée) avec Notification message.i transmettre mon objet calendrier depuis Pickers. Si je ne redémarre pas mon appareil, cela fonctionne normalement. Cependant, lorsque je redémarre mon appareil, comme vous le savez, mon objet calander sera nul. Comment puis-je gérer mon alarme répétée après le redémarrage et comment puis-je tenir mes calendriers de calendrier? Merci pour vos idées.Répétition du gestionnaire d'alarmes Après le redémarrage

public class MyReceiver extends BroadcastReceiver { 
private static final int PERIOD = 10000; 
final public static String ALARM_ID = "AlarmId"; 
final public static String NOTIFICATION_ID = "NotificationId"; 


@Override 
public void onReceive(Context ctxt, Intent i) { 

} 

static void scheduleAlarms(Context ctxt,Calendar c) { 
    AlarmManager alarManager = (AlarmManager) ctxt 
      .getSystemService(Context.ALARM_SERVICE); 
//notification servise 
    Intent i = new Intent(ctxt, ScheduledService.class); 
i.putExtra(ALARM_ID, 1); 
i.putExtra(NOTIFICATION_ID, 1); 

PendingIntent pi = PendingIntent.getService(ctxt, 0, i, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
alarManager.setRepeating(AlarmManager.RTC,c.getTimeInMillis(),PERIOD, pi); 
} 
+2

duplication possible de [Android AlarmManager après le redémarrage] (http://stackoverflow.com/questions/12512717/android-alarmmanager-after-reboot) – g00dy

Répondre

10

Vous devez utiliser un BroadcastReceiver et le mettre à répondre aux BOOT_COMPLETED messages. Par exemple

Enregistrez votre BroadcastReceiver dans le manifeste

<receiver android:name=".MyBootReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

Gérer le message dans votre code

MyBootReceiver.java

public class MyBootReceiver extends BroadcastReceiver 
{ 
    private static final String TAG = "MyBootReceiver"; 

    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "onReceive"); 
     Calendar cal = this.getMyCalendar(); 
     this.scheduleAlarms(context, cal); 
    } 

    private Calendar getMyCalendar() { 
     // get your calendar object 
    } 

    private void scheduleAlarms(Context ctxt, Calendar c) { 
     AlarmManager alarManager = (AlarmManager) ctxt.getSystemService(Context.ALARM_SERVICE); 
     //notification servise 
     Intent i = new Intent(ctxt, ScheduledService.class); 
     i.putExtra(ALARM_ID, 1); 
     i.putExtra(NOTIFICATION_ID, 1); 

     PendingIntent pi = PendingIntent.getService(ctxt, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
     alarManager.setRepeating(AlarmManager.RTC,c.getTimeInMillis(),PERIOD, pi); 
    } 
} 

Ceci permet de réinitialiser votre horaire d'alarme démarrage.

+8

ne pas oublier d'ajouter

Questions connexes