2

Dans mon application, j'ai réglé les deux alarmes. Sur toogleButton sur je vais le mettre avec le code ci-dessous:Android: Alarme multiple ne fonctionne pas

case R.id.toggleButtonTwoMonth: 
      myPrefs = this.getSharedPreferences("myPrefs",MODE_WORLD_WRITEABLE); 
      if (tButtonTwoMonth.isChecked()) { 
       Toast.makeText(getApplicationContext(), "Two months reminder is On", Toast.LENGTH_SHORT).show(); 
       prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", true); prefsEditor.commit(); 

       //For Broadcast Alarm 
       Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 

       alarmManagerForTwoMonth1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       alarmManagerForTwoMonth2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 

       pendingIntentOfTwoMonth1 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT); 
       pendingIntentOfTwoMonth2 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT); 
       // ===================== GST ALARM FOR THE TWO MONTHS ========================== 

       // for the GST 20 June 2011 
       Calendar calendar_GST_18_June_2011 = Calendar.getInstance(); 
       calendar_GST_18_June_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_18_June_2011.set(2011, 5, 18, mHour, mMinute, 0); 
       alarmManagerForTwoMonth1.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_June_2011.getTimeInMillis(), pendingIntentOfTwoMonth1); 

       // for the GST 17 August 2011 

       Calendar calendar_GST_17_August_2011 = Calendar.getInstance(); 
       calendar_GST_17_August_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_17_August_2011.set(2011, 7, 17,mHour, mMinute, 0); 
       alarmManagerForTwoMonth2.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_August_2011.getTimeInMillis(),pendingIntentOfTwoMonth2); 


      } 
      else { 
       Toast.makeText(getApplicationContext(), "Two months reminder is Off", Toast.LENGTH_SHORT).show(); 
       prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", false); prefsEditor.commit(); 

       //alarmManagerForTwoMonth.cancel(pendingIntentOfTwoMonth); 
      } 
      break; 

Mais je ne reçois pas la notification de AMARM à ce moment-là du désir et si la bascule est activée. Maintenant, après que l'heure de l'alarme soit passée, et si je le fais, je l'éteins, puis je rallume l'alarme.

Alors, quel est le problème avec mon code? S'il vous plaît aidez-moi pour cela.

ÉDITÉ:

Avec thia réponse que je résoudre pour régler l'alarme pour le temps multiple: How can I setup multiple alarms in Android?

Mais je me demande comment obtenir la poignée. Je veux dire comment gérer cette alarme sur le récepteur avec un message différent?

Mon code mis à jour avec l'alarme multiple est ci-dessous:

//For Broadcast Alarm 
       Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 

       // ===================== GST ALARM FOR THE TWO MONTHS ========================== 

       // for the GST 20 June 2011 
       alarmManagerForTwoMonth1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       pendingIntentOfTwoMonth1 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_18_June_2011 = Calendar.getInstance(); 
       calendar_GST_18_June_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_18_June_2011.set(2011, 5, 18, mHour, mMinute, 0); 
       alarmManagerForTwoMonth1.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_June_2011.getTimeInMillis(), pendingIntentOfTwoMonth1); 

       // for the GST 17 August 2011 
       alarmManagerForTwoMonth2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       pendingIntentOfTwoMonth2 = PendingIntent.getBroadcast(this, 1, in, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_17_August_2011 = Calendar.getInstance(); 
       calendar_GST_17_August_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_17_August_2011.set(2011, 7, 17,mHour, mMinute, 0); 
       alarmManagerForTwoMonth2.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_August_2011.getTimeInMillis(),pendingIntentOfTwoMonth2); 

et le code pour le récepteur est comme ci-dessous:

public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 

    // My Notification Code 
    notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    int icon = R.drawable.app_icon; 

    CharSequence text = "Your tax amount due period"; 
    CharSequence contentTitle = "Tax Calculator App"; 
    Calendar cal = Calendar.getInstance(); 
    cal.setTimeInMillis(System.currentTimeMillis()); 
    System.out.println("the Date is: "+(cal.getTime().getDate())+" "+ (cal.getTime().getMonth())+" "+ (cal.get(Calendar.YEAR))); 

    if((cal.getTime().getDate()==18) && (cal.getTime().getMonth()==5) && (cal.get(Calendar.YEAR)==2011)){ 
     contentText = "Your GST tax amount is due on 20 June 2011"; 
    } 
    else if((cal.getTime().getDate()==17) && (cal.getTime().getMonth()==7) && (cal.get(Calendar.YEAR)==2011)){ 
     contentText = "Your GST tax amount is due on 19th August, 2011"; 
    } 
    else{ 
     contentText = "Your GST tax amount is due on Falana Dhikna Date"; 
    } 

    long when = System.currentTimeMillis(); 

    intent = new Intent(context, NotificationViewer.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    notification = new Notification(icon,text,when); 

    long[] vibrate = {0,100,200,300}; 
    notification.vibrate = vibrate; // To vibrate the Device 

    notification.ledARGB = Color.RED; 
    notification.ledOffMS = 300; 
    notification.ledOnMS = 300; 

    notification.defaults |= Notification.DEFAULT_LIGHTS; 
    //notification.flags |= Notification.FLAG_SHOW_LIGHTS; 

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
    notificationManager.notify(NotificationConstants.NOTIFICATION_ID, notification); 


} 

Maintenant, comment gérer cette alarme différente ?? Aidez-moi pour ça. Merci.

Edité

Pleasee ce code:

case R.id.toggleButtonTwoMonth: 
      myPrefs = this.getSharedPreferences("myPrefs",MODE_WORLD_WRITEABLE); 
      if (tButtonTwoMonth.isChecked()) { 
       Toast.makeText(getApplicationContext(), "Two months reminder is On", Toast.LENGTH_SHORT).show(); 
       prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", true); prefsEditor.commit(); 

       //For Broadcast Alarm 
       //Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 

       // ===================== GST ALARM FOR THE TWO MONTHS ========================== 

       // for the GST 20 June 2011 
       AM_2M_GST_1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in1 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in1.putExtra("MyMessage","Your GST tax is due on 20 June 2011"); 
       PI_2M_GST_1 = PendingIntent.getBroadcast(this, 0, in1, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_18_June_2011 = Calendar.getInstance(); 
       calendar_GST_18_June_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_18_June_2011.set(2011, 5, 18, mHour, mMinute, 0); 
       AM_2M_GST_1.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_June_2011.getTimeInMillis(), PI_2M_GST_1); 

       // for the GST 19 August 2011 
       AM_2M_GST_2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in2 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in2.putExtra("MyMessage","Your GST tax is due on 19 August 2011"); 
       PI_2M_GST_2 = PendingIntent.getBroadcast(this, 1, in2, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_17_August_2011 = Calendar.getInstance(); 
       calendar_GST_17_August_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_17_August_2011.set(2011, 7, 17,mHour, mMinute, 0); 
       AM_2M_GST_2.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_August_2011.getTimeInMillis(),PI_2M_GST_2); 

       // for the GST 19 October 2011 
       AM_2M_GST_3 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in3 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in3.putExtra("MyMessage","Your GST tax is due on 19 October 2011"); 
       PI_2M_GST_3 = PendingIntent.getBroadcast(this, 2, in3, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_19_October_2011 = Calendar.getInstance(); 
       calendar_GST_19_October_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_19_October_2011.set(2011, 9, 19,mHour, mMinute, 0); 
       AM_2M_GST_3.set(AlarmManager.RTC_WAKEUP, calendar_GST_19_October_2011.getTimeInMillis(),PI_2M_GST_3); 

       // for the GST 17 December 2011 
       AM_2M_GST_4 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in4 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in4.putExtra("MyMessage","Your GST tax is due on 17 December 2011"); 
       PI_2M_GST_4 = PendingIntent.getBroadcast(this, 3, in4, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_17_December_2011 = Calendar.getInstance(); 
       calendar_GST_17_December_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_17_December_2011.set(2011, 11, 17,mHour, mMinute, 0); 
       AM_2M_GST_4.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_December_2011.getTimeInMillis(),PI_2M_GST_4); 

       // for the GST 20 February 2012 
       AM_2M_GST_5 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in5 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in5.putExtra("MyMessage","Your GST tax is due on 18 February 2012"); 
       PI_2M_GST_5 = PendingIntent.getBroadcast(this, 4, in5, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_18_February_2012 = Calendar.getInstance(); 
       calendar_GST_18_February_2012.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_18_February_2012.set(2012, 1, 18,mHour, mMinute, 0); 
       AM_2M_GST_5.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_February_2012.getTimeInMillis(),PI_2M_GST_5); 

       // for the GST 27 April 2012  
       AM_2M_GST_6 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in6 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in6.putExtra("MyMessage","Your GST tax is due on 27 April 2012"); 
       PI_2M_GST_6 = PendingIntent.getBroadcast(this, 5, in6, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_GST_27_April_2012 = Calendar.getInstance(); 
       calendar_GST_27_April_2012.setTimeInMillis(System.currentTimeMillis()); 
       calendar_GST_27_April_2012.set(2012, 3, 27,mHour, mMinute, 0); 
       AM_2M_GST_6.set(AlarmManager.RTC_WAKEUP, calendar_GST_27_April_2012.getTimeInMillis(),PI_2M_GST_6); 

       // ===================== PROVISIONAL ALARM FOR THE TWO MONTHS ========================== 

       // for the PROVISIONAL 26 August 2011 
       AM_2M_PROVISIONAL_1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in7 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in7.putExtra("MyMessage","Your PROVISIONAL tax is due on 26 August 2011"); 
       PI_2M_PROVISIONAL_1 = PendingIntent.getBroadcast(this, 6, in7, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_PROVISIONAL_26_August_2011 = Calendar.getInstance(); 
       calendar_PROVISIONAL_26_August_2011.setTimeInMillis(System.currentTimeMillis()); 
       calendar_PROVISIONAL_26_August_2011.set(2011, 7, 26,mHour, mMinute, 0); 
       AM_2M_PROVISIONAL_1.set(AlarmManager.RTC_WAKEUP, calendar_PROVISIONAL_26_August_2011.getTimeInMillis(),PI_2M_PROVISIONAL_1); 

       // for the PROVISIONAL 13 January 2012 
       AM_2M_PROVISIONAL_2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in8 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in8.putExtra("MyMessage","Your PROVISIONAL tax is due on 13 January 2012"); 
       PI_2M_PROVISIONAL_2 = PendingIntent.getBroadcast(this, 7, in8, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_PROVISIONAL_13_January_2012 = Calendar.getInstance(); 
       calendar_PROVISIONAL_13_January_2012.setTimeInMillis(System.currentTimeMillis()); 
       calendar_PROVISIONAL_13_January_2012.set(2012, 0, 13,mHour, mMinute, 0); 
       AM_2M_PROVISIONAL_2.set(AlarmManager.RTC_WAKEUP, calendar_PROVISIONAL_13_January_2012.getTimeInMillis(),PI_2M_PROVISIONAL_2); 

       // for the PROVISIONAL 5 May 2012 
       AM_2M_PROVISIONAL_3 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in9 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in9.putExtra("MyMessage","Your PROVISIONAL tax is due on 5 May 2012"); 
       PI_2M_PROVISIONAL_3 = PendingIntent.getBroadcast(this, 8, in9, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_PROVISIONAL_5_May_2012 = Calendar.getInstance(); 
       calendar_PROVISIONAL_5_May_2012.setTimeInMillis(System.currentTimeMillis()); 
       calendar_PROVISIONAL_5_May_2012.set(2012, 4, 5,mHour, mMinute, 0); 
       AM_2M_PROVISIONAL_3.set(AlarmManager.RTC_WAKEUP, calendar_PROVISIONAL_5_May_2012.getTimeInMillis(),PI_2M_PROVISIONAL_3); 

       // ===================== TERMINAL ALARM FOR THE TWO MONTHS ========================== 

       // for the TERMINAL 5 April 2012  
       AM_2M_TERMINAL_1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       Intent in10 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
       in10.putExtra("MyMessage","Your TERMINAL tax is due on 5 APRIL 2012"); 
       PI_2M_TERMINAL_1 = PendingIntent.getBroadcast(this, 9, in10, PendingIntent.FLAG_UPDATE_CURRENT); 
       Calendar calendar_TERMINAL_5_APRIL_2012 = Calendar.getInstance(); 
       calendar_TERMINAL_5_APRIL_2012.setTimeInMillis(System.currentTimeMillis()); 
       calendar_TERMINAL_5_APRIL_2012.set(2012, 3, 5,mHour, mMinute, 0); 
       AM_2M_TERMINAL_1.set(AlarmManager.RTC_WAKEUP, calendar_TERMINAL_5_APRIL_2012.getTimeInMillis(),PI_2M_TERMINAL_1); 

      } 
      else { 
       Toast.makeText(getApplicationContext(), "Two months reminder is Off", Toast.LENGTH_SHORT).show(); 
       prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", false); prefsEditor.commit(); 

       AM_2M_GST_1.cancel(PI_2M_GST_1); 
       AM_2M_GST_2.cancel(PI_2M_GST_2); 
       AM_2M_GST_3.cancel(PI_2M_GST_3); 
       AM_2M_GST_4.cancel(PI_2M_GST_4); 
       AM_2M_GST_5.cancel(PI_2M_GST_5); 
       AM_2M_GST_6.cancel(PI_2M_GST_6); 
       AM_2M_PROVISIONAL_1.cancel(PI_2M_PROVISIONAL_1); 
       AM_2M_PROVISIONAL_2.cancel(PI_2M_PROVISIONAL_2); 
       AM_2M_PROVISIONAL_3.cancel(PI_2M_PROVISIONAL_3); 
       AM_2M_TERMINAL_1.cancel(PI_2M_TERMINAL_1); 

       //alarmManagerForTwoMonth.cancel(pendingIntentOfTwoMonth); 
      } 
      break; 

maintenant. ici j'ai eu la notification. mais je le veux séparé pour tous. Moyens s'il en existe déjà un et si nouveau est généré alors il ne devrait pas être mis à jour le déjà présent mais devrait en créer un nouveau séparé. Merci.

+0

ru en utilisant la base de données SQLite (base de données interne) pour enregistrer l'alarme et utiliser le récepteur de diffusion pour obtenir la notification d'alarme. –

+0

Non, je n'utilise aucune base de données pour cela. . . Pourquoi ? devrais-je le faire? –

+0

S'il vous plaît voir ma question mise à jour. –

Répondre

4

Ok, pourquoi ne pas le faire

Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class); 
in.putExtra("MyMessage","Your tax is due on blah blah blah"); 
pendingIntentOfTwoMonth1 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT); 

Et dans le onRecieve

Retrieve simplement le message de l'intention

public void onReceive(Context context, Intent intent) { 

// blah blah 
    Toast.show(context,intent.getStringExtra("MyMessage"),Toast.LENGTH_LONG).show(); 
+0

Ok Donc, si je l'utilise pour mon code alors ce sera le travail que je veux? –

+0

Oui, Lorsque vous réglez votre alarme, Utilisez l'intention de stocker des données sur l'événement ... Dans votre récepteur de réception, il suffit de récupérer les données de cet Intention (2ème paramètre de 'onRecieve') c'est le même que vous avez créé lors de l'alarme – st0le

+0

J'ai une erreur de syntaxe à l'intention que la variable n'est pas résolue –

1

Plz essayer ma réponse du lien suivant utilisant la base de données.

AlarmManager with Broadcast Receiver

Première Ajouter temps d'alarme et la date dans la base de votre activité & puis créer la classe de récepteur de radiodiffusion pour obtenir les données de base de données.

+0

Donc, si je veux faire l'alarme multiple pour sélectionner le jour, alors je dois utiliser la base de données pour utiliser la date sélectionnée? –

+0

Mais si j'utilise le Single Alatm avec la date et l'heure sélectionnées, alors cela fonctionne, alors pourquoi pas pour d'autres dates? –

+0

Dans Alarme intégrée seulement L'alarme unique fonctionne si vous utilisez la base de données pour l'alarme multiple qui est travaillée pour moi à partir du lien ci-dessus. –