Autore Topic: Problema con Notifiche e AlarmMenager  (Letto 568 volte)

Offline Nicolab1971

  • Utente junior
  • **
  • Post: 107
  • Respect: +2
    • Mostra profilo
Problema con Notifiche e AlarmMenager
« il: 26 Aprile 2014, 23:47:34 CEST »
0
Ho estrapolato questa porzione di codiche che ho inserito al momento del salvatggio di un appuntamento in un app agenda che stò sviluppando, il problema è che schedulando un "allarme" singolo funziona tutto correttamente. Una volta scaduto mi viene visualizzato correttamente nell'area di notifica, se ne programmo un altro anche il secondo a scadenza viene visualizzato. Il problema nasce quando schedulo due allarmi chiaramente su due appuntamenti. Il primo sembra essere ignorato e al momento della scadenza del secondo mi viene visualizzato il primo.
Alla classe ReciverAllarmMessage che estende BroadcastReceiver passo tramite un exrta un id che corrisponde al id del record nel database, un modo da poter recuperare tutti i dati necessari da visualizzare nell'area di notifica

/* IL CODICE SEGUENTE E' ALL'INTERNO DI UN BOTONE CHE SALVA L'APPUNTAMENTO NEL DATABASE */
Codice (Java): [Seleziona]
                Calendar calendar = Calendar.getInstance();

                calendar.set(Calendar.MONTH, tmpNotifyMounth - 1);
                calendar.set(Calendar.YEAR, tmpNotifyYear);
                calendar.set(Calendar.DAY_OF_MONTH, tmpNotifyDay);
                calendar.set(Calendar.HOUR_OF_DAY, tmpNotifyHour);
                calendar.set(Calendar.MINUTE, tmpNotifyMinute);
                calendar.set(Calendar.SECOND, 0);

                PendingIntent pendingIntent;
                Intent i = new Intent(Appuntamento.this, ReciverAllarmMessage.class);
                i.putExtra("NotifID",notifyID);

                pendingIntent = PendingIntent.getBroadcast(Appuntamento.this, 0, i,0);

                AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
                alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);


/* LA PORZIONE DI CODICE SEGUENTE E' NELLA CLASSE ReciverAllarmMessage E RECUPERA I DATI DA IL DB E CREA LA NOTIFICA */
Codice (Java): [Seleziona]
try {

            int notifyID = intent.getExtras().getInt("NotifID");
            Log.e("NOTIFICA ID", String.valueOf(notifyID));

            db = new DatabaseHandler(context);
            job lavoro = db.getJob(notifyID);

            String sommario = lavoro.getSommario();
            String indirizzo = lavoro.getIndirizzo();
            String riferimento = lavoro.getRiferimento();
            String Telefono = lavoro.getTelefono();


            mManager = (NotificationManager) context.getApplicationContext().getSystemService(context.getApplicationContext().NOTIFICATION_SERVICE);

            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + indirizzo));
            PendingIntent naviga = PendingIntent.getActivity(context, 0, i, 0);

            Intent call = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + Telefono));
            PendingIntent chiama = PendingIntent.getActivity(context, 0, call, 0);

            final Notification notification = new Notification.Builder(context)
                    .setContentTitle(sommario)
                    .setContentText(indirizzo)
                    .setSmallIcon(R.drawable.ic_notify_go_to_today)
                    .setAutoCancel(true)
                    .addAction(R.drawable.ic_action_call, "Chiama", chiama)
                    .addAction(R.drawable.ic_action_place, "Naviga", naviga)
                    .build();


            notification.flags |= Notification.FLAG_AUTO_CANCEL;

            mManager.notify(notifyID, notification);

        }
        catch (Exception e) {}

Come posso risolvere il problema.

Nicola

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con Notifiche e AlarmMenager
« Risposta #1 il: 27 Aprile 2014, 10:25:31 CEST »
0
Puoi cominciare col vedere quali AlarmManager hai effettivamente impostato.

Apri una shell e vedi cosa esce con:
Codice: [Seleziona]
adb shell dumpsys alarm
Se c'è troppo testo, fai il dump su file
Codice: [Seleziona]
adb shell dumpsys alarm > list.txt
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicolab1971

  • Utente junior
  • **
  • Post: 107
  • Respect: +2
    • Mostra profilo
Re:Problema con Notifiche e AlarmMenager
« Risposta #2 il: 27 Aprile 2014, 13:52:04 CEST »
0
Questa sera provo mettere un pratica il tuo consiglio . Intanto grazie mille


Inviato dal mio iPhone utilizzando Tapatalk

Post unito: 27 Aprile 2014, 19:27:24 CEST
Ho provato come suggerito a generare un filequando programmo un allarme singolo (dove l'app risponde come mi aspetto) e a generare un file dove sono programmati due allarmi diversi a pochi minuti di distanza l'uno dall'altro. Il risultato mi sembra identico da profano mi aspettavo di trovare all'interno del file nelle sue varie sezioni i due allarmi, mi spiego meglio se ci riesco, pensavo di trovare per la sezione  Current Alarm Manager state: due blocchi come quello riportato sotto ma cosi non è

  RTC #2: Alarm{4251cbc0 type 1 com.example.calendario.app}
    type=1 when=+2m55s831ms repeatInterval=0 count=0
    operation=PendingIntent{42904e60: PendingIntentRecord{429ae5d8 com.example.calendario.app broadcastIntent}}

Allego i file del singolo allarme e di quello doppio. L'applicazione è questa com.example.calendario.

Non riesco proprio a capire cosa ci sia che non va. Per eliminare eventuali problemi  ho creato un app di test coimamata calendario dove è implementata solo la parte della notifica ma chiaramente non funziona si comporta esattamente come la precedente.
« Ultima modifica: 27 Aprile 2014, 19:27:24 CEST da Nicolab1971, Reason: Merged DoublePost »

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema con Notifiche e AlarmMenager
« Risposta #3 il: 27 Aprile 2014, 22:14:45 CEST »
0
scusate lo spam, ma "inviato da iphone" non si può leggere

Offline Nicolab1971

  • Utente junior
  • **
  • Post: 107
  • Respect: +2
    • Mostra profilo
Re:Problema con Notifiche e AlarmMenager
« Risposta #4 il: 01 Maggio 2014, 19:00:53 CEST »
0
C'è nessuno che può darmi un seggerimento su che direzione prendere? ho effettuato altri tentativi ma nessuno ha prodotto i l risultato sperato.

Offline Nicolab1971

  • Utente junior
  • **
  • Post: 107
  • Respect: +2
    • Mostra profilo
Re:Problema con Notifiche e AlarmMenager
« Risposta #5 il: 06 Maggio 2014, 09:54:28 CEST »
0
Dopo qualche giorno mi sono nuovamente messo a cercare di capire come mai non mi funzionasse la schedulazione degli allarmi, e finalmente ho trovato il problema che sta nella line di codice riportata sotto.

Codice: [Seleziona]
pendingIntent = PendingIntent.getBroadcast(Appuntamento.this, 0, i,0);

Erroneamente valorizzavo sempre a 0 il secondo paramtero che è requestCode, quindindi non poteva funzionare. Al suo posto inserisco in id univoco dell'appuntamento su cui devo programmare la notifica.
Spero sia utile anche ad altri.


Ciao
« Ultima modifica: 06 Maggio 2014, 11:27:58 CEST da Nicolab1971 »