2016-04-08 4 views
0

Je travaille actuellement sur une notification qui doit être affichée à une heure spécifique choisie par l'utilisateur. Mais quand je l'exécute, les notifications s'affichent mais pas à l'heure sélectionnée, seulement quand je demande l'heure dans un timepickerdialog avant même de choisir une heure.La notification montre quand ce n'est pas supposé

Est-ce que quelqu'un sait comment changer le code pour que les notifications n'apparaissent qu'à l'heure sélectionnée?

showDialog(DIALOG_ID); //this is the dialog that asks for an hour and minute. 


alarmMethod1(); 


private void alarmMethod1(){ 


     Calendar calendari1 = Calendar.getInstance(); 
     calendari1.set(Calendar.HOUR_OF_DAY, hour_x); 
     calendari1.set(Calendar.MINUTE, minute_x); 
     calendari1.set(Calendar.SECOND, 00); 

     Intent myIntent1 = new Intent(Main2Activity.this, NotifyService1.class); 
     AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE); 
     pendingIntent1 = PendingIntent.getService(Main2Activity.this, 0, myIntent1, 0); 
     alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, calendari1.getTimeInMillis(), 24 * 60 * 60 * 1000, pendingIntent1); 

} 

Alors voici la classe où l'intention va:

public class NotifyService1 extends Service { 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onCreate(){ 
    Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 


    NotificationManager nNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    Intent intent1 = new Intent(this.getApplicationContext(),Main3Activity.class); 
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0); 

    Notification mNotify = new Notification.Builder(this) 
      .setContentTitle("Hora d'entrenar!") 
      .setContentText("Clica per començar entrenament de pit i braços") 
      .setSmallIcon(R.drawable.logofinal) 
      .setContentIntent(pIntent) 
      .setSound(sound) 
      .build(); 

    nNM.notify(1,mNotify); 

} 

} 

Répondre

0

Depuis API Android 19, toutes les alarmes sont inexactes afin de réduire la consommation de la batterie, cela signifie que vos alarmes ne seront pas déclenchées exactement quand vous voulez, mais si vous avez vraiment besoin de le faire, vous devez utiliser setExact et ensuite écrire le gestionnaire d'alarme de répétition par vous-même, il n'y a plus de "set exact and repeat". S'il vous plaît, voir:

http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int, long, long, android.app.PendingIntent)

http://developer.android.com/reference/android/app/AlarmManager.html#setExact(int, long, android.app.PendingIntent)