2016-07-12 5 views
0

Ich mache eine App, wo Sie Alarme einstellen können. es funktioniert tatsächlich aber nur einmal. und ich muss mehr als einmal tun. Ich versuche, eine Klasse Zeitplan Alarme zu tun.Android Alarmmanager Alarme in bestimmten Tagen einstellen und sie alle Wochen wiederholen

zum beispiel habe ich klasse montags um sieben, also muss ich jeden montag den alarm starten. aber auch ich habe einen anderen klasse dienstag und muss es genauso machen.

hier mein Code,> funktioniert Pd- rqs1 = 1

Calendar cal = Calendar.getInstance(); 
     cal.setTimeInMillis(System.currentTimeMillis()); 
     cal.set(Calendar.HOUR_OF_DAY, horai); // i put the hour with the interface 
     cal.set(Calendar.MINUTE,minutoi);/// 
     cal.set(Calendar.DAY_OF_WEEK,dias.getSelectedItemPosition()+1); 
     cal.add(Calendar.SECOND, 2); 



     Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
     intent.putExtra("name", curso); // i put the name of the curso 
     PendingIntent pendingIntent = 
       PendingIntent.getBroadcast(getBaseContext(), 
         RQS_1, intent, PendingIntent.FLAG_ONE_SHOT); 


    AlarmManager alarmManager = 
      (AlarmManager)getSystemService(Context.ALARM_SERVICE); 


    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
      cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent);` 

so, ich habe mich, wie es geht. bitte hilf mir. Dank

+0

Sie es gelöst haben? –

+0

nein ich es immer noch – fer

+0

Anstelle der Verwendung von 'setRepeating' versuchen zu tun, verwenden Sie nur' Set' und dann in der Sendung die Sendung onReceiver rufen wieder –

Antwort

0

1- Ersetzen dieses

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
     cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent);` 

mit diesem:

alarmManager.set(AlarmManager.RTC_WAKEUP, 
      cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent); 

2- Ersetzen dieses

PendingIntent pendingIntent = 
      PendingIntent.getBroadcast(getBaseContext(), 
        RQS_1, intent, PendingIntent.FLAG_ONE_SHOT); 

mit diesem:

PendingIntent pendingIntent = 
      PendingIntent.getBroadcast(getBaseContext(), 
        RQS_1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

3- Fügen Sie diese innerhalb onReceive:

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
    intent.putExtra("name", curso); // i put the name of the curso 
    PendingIntent pendingIntent = 
      PendingIntent.getBroadcast(getBaseContext(), 
        RQS_1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 


AlarmManager alarmManager = 
     (AlarmManager)getSystemService(Context.ALARM_SERVICE); 


alarmManager.set(AlarmManager.RTC_WAKEUP, 
     cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent);` 
0

Versuchen FLAG_UPDATE_CURRENT statt FLAG_ONE_SHOT verwenden.

Stellen Sie außerdem sicher, dass die Alarme nach dem Neustart des Geräts neu geplant werden. Here ist ein gutes Beispiel.

+0

schreiben, wie kann ich die Alarme nach Neustart des Geräts neu planen ?????? – fer

Verwandte Themen