Autore Topic: Notofication: Invio in differenti giorni  (Letto 130 volte)

Offline Raffyna

  • Utente junior
  • **
  • Post: 103
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Notofication: Invio in differenti giorni
« il: 16 Novembre 2016, 12:40:07 CET »
0
Ciao a tutti,
devo gestire la seguente local notification:
- Primo Invio: dopo 3 giorni;
- Secondo Invio : dopo aver ricevuto la prima notifica schedularne una nuova dopo 6 giorni;
- Terzo Invio: dopo la ricezione della seconda notifica schedularne una nuova dop 21 giorni;

Ho scritto il seguente codice:
Codice: [Seleziona]
@Override
    protected void onCreate(Bundle savedInstanceState)
    {
      ....
        broadcast3d  = PendingIntent.getBroadcast(this, 103, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        broadcast6d  = PendingIntent.getBroadcast(this, 106, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        broadcast21d = PendingIntent.getBroadcast(this, 121, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

 }


    private void setNotification()
    {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.HOUR_OF_DAY, 10);
        cal.add(Calendar.MINUTE,30);
        cal.add(Calendar.SECOND, 0);
       
         alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 3 , broadcast3d);
          alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 6, broadcast6d);
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 21, broadcast21d);
}

public void onResume()
    {
        super.onResume();
        if (alarmManager!= null)
        {
            alarmManager.cancel(broadcast3d);
            //alarmManager.cancel(broadcast6d);
            //alarmManager.cancel(broadcast21d);
        }
    }

    public void onPause()
    {
        super.onPause();
        setNotification();
    }

    public void onDestroy()
    {
        super.onDestroy();
        setNotification();
    }

    public void onStart()
    {
        super.onStart();

        if (alarmManager!= null)
        {
            alarmManager.cancel(broadcast3d);
            alarmManager.cancel(broadcast6d);
            alarmManager.cancel(broadcast21d);
        }
    }



Però in questo modo ricevo la notifica ogni 3 giorni, avete un'idea di come poter risolvere questo problema?
Grazie

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1363
  • Respect: +156
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Notofication: Invio in differenti giorni
« Risposta #1 il: 17 Novembre 2016, 12:42:45 CET »
0
Puoi usare l'AlarmManager.
Ti permette di specificare quando inviare un Intent.

Immagino che dovrai implementare qualcosa del tipo:
1- Primo avvio scheduli l'intent dopo 3 giorni
2- Ricevi l'intent tramite un BroadcastReceiver e ne scheduli un altro dopo 6 giorni
3- Stessa cosa per l'ultimo caso
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Raffyna

  • Utente junior
  • **
  • Post: 103
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Re:Notofication: Invio in differenti giorni
« Risposta #2 il: 30 Novembre 2016, 17:22:19 CET »
0
Ciao,
in realtà già faccio così ma non funzione.
Ti speigo: ho definito un AlarmManager ogni 3 Giorni in questo modo
Codice: [Seleziona]
     Calendar cal = Calendar.getInstance();
        cal.add(Calendar.HOUR_OF_DAY, 10);
        cal.add(Calendar.MINUTE,30);
        cal.add(Calendar.SECOND, 0);
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 3 , broadcast3d);
ed ho gestito un Receiver in questo modo :
Codice (Java): [Seleziona]
public class AlarmReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        Intent notificationIntent = new Intent(context, MainActivity.class);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addParentStack(MainActivity.class);
        stackBuilder.addNextIntent(notificationIntent);

        PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

        Notification notification = builder.setContentTitle(context.getString(R.string.action_bar_title_home))
                .setSmallIcon(R.drawable.d_point)
                .setContentIntent(pendingIntent).build();

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notification);
    }
}

Ma sembra non funzionare anche perchè la notifica mi arriva tutti i giorni e neanche all'orario che ho indicato (10.30) :(

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1363
  • Respect: +156
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Notofication: Invio in differenti giorni
« Risposta #3 il: 02 Dicembre 2016, 12:34:33 CET »
0
Citazione
Ma sembra non funzionare anche perchè la notifica mi arriva tutti i giorni e neanche all'orario che ho indicato (10.30)
Non vedo problemi sull'intervallo, in teoria dovrebbe essere giusto quel *3.
Invece tu scrivi che hai indicato 10:30, ma non è così. Ti commento il codice riguardante il calendar:
Codice (Java): [Seleziona]
// Credi un calendario inizializzato all'orario attuale, per esempio 12:30
Calendar cal = Calendar.getInstance();
// Aggiungi dieci ore
cal.add(Calendar.HOUR_OF_DAY, 10);
// Aggiungi trenta minuti
cal.add(Calendar.MINUTE,30);
// Aggiungi zero secondi
cal.add(Calendar.SECOND, 0);

Quindi in sostanza il calendario alla fine contiene il risultato di quelle operazioni, non è settato alle 10:30 di domani.
Postate il LogCat LogCat LogCat LogCat LogCat