Autore Topic: Service sempre presente!  (Letto 1635 volte)

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Service sempre presente!
« il: 21 Settembre 2010, 10:06:57 CEST »
0
Mi serve una applicazione che mi notifichi i compleanni dei miei amici, la data del compleanno è presente nel contatto di Google (so che già esiste, ma la voglio sviluppare per fare pratica proprio su questo argomento).

L'applicazione, di per se, non è complicatissima: leggere tutti i contatti di google, ordinarli per data di compleanno (a partire dalla data odierna) e mostrare la lista delle ricorrenze ordinata.

Se un contatto fa il compleanno in un range di date, mostrare una notifica.

Quest'ultimo punto è quello che mi crea problemi! Per fare ciò, infatti, ho bisogno di un service sempre in esecuzione (che banalmente ogni giorno, una volta al giorno, effettua un check dei compleanni creando la notifica).

Primo problema: come avvio il service dopo l'installazione dell'applicazione e dopo l'avvio del cellulare?
Un giro di google e ho capito che mi basta creare l'intent filter di un broadcast receiver di tipo android.intent.action.BOOT_COMPLETED per far partire il service. Vale anche per l'installazione della app o serve qualche altro intent (che non trovo!).

Secondo problema: come faccio ad essere sicuro che il service sia sempre in esecuzione? Posso aumentare la priorità del thread, ma non mi sembra una cosa furba da fare visto l'uso!

In attesa di illuminazioni! ;)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Service sempre presente!
« Risposta #1 il: 21 Settembre 2010, 11:40:01 CEST »
0
Ma sei sicuro che sia necessario scomodare un service per una cosa del genere?

Io farei tutto senza, credo sia infatti sufficiente utilizzare, come hai già accennato tu, un broadcast receiver sul BOOT_COMPLETED o al limite l'alarm manager se vuoi fare più verifiche o se l'utente non spegne mai il suo telefono.
 
Se il controllo lo fai solo una volta al giorno, stimando una durata dell'operazione di 2 secondi, perché dovresti tenere il service attivo anche nelle restanti 86398 secondi (aka 23 ore, 59 minuti e 58 secondi)?
« Ultima modifica: 21 Settembre 2010, 12:03:18 CEST da JD »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service sempre presente!
« Risposta #2 il: 21 Settembre 2010, 12:16:09 CEST »
0
Allora, il controllo vorrei ripeterlo alle 5 del mattino, tutte le mattine, quindi penso che l'AlarmManager faccia a caso mio...

Il punto è quando e dove lo imposto?
Rispondendomi da solo, direi nel BroadcastReceiver sul BOOT_COMPLETED. Ma subito dopo l'installazione come lo faccio partire?

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Service sempre presente!
« Risposta #3 il: 21 Settembre 2010, 12:20:18 CEST »
0
Sinceramente non so se è possibile far partire qualcosa subito dopo l'installazione dell'apk, ma a pelle direi di no. In ogni caso potresti creare un'activity con un minimo di info su cosa fa sto programma che l'utente deve aprire subito dopo averlo installato, che potresti quindi sfruttare per registrarti la prima volta sull'alarm manager.
E se l'utente non la apre, allora aspetti il primo BOOT_COMPLETED.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service sempre presente!
« Risposta #4 il: 21 Settembre 2010, 12:31:44 CEST »
0
Ho trovato android.intent.action.PACKAGE_INSTALL che forse fa a caso mio...

Adesso ho un altro problemino stupido... ma i contatti dell'emulatore non hanno il compleanno?????? Non riesco ad impostarlo in nessun modo e quindi non posso fare dei test sull'emulatore!

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Service sempre presente!
« Risposta #5 il: 21 Settembre 2010, 12:35:18 CEST »
0
Cavolo è vero, non c'è nemmeno nella rom dell'ADP1. Probabilmente sono stati introdotti di recente e richiedono le google apps :P
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Service sempre presente!
« Risposta #6 il: 21 Settembre 2010, 12:53:08 CEST »
0
Mi sto sentendo un pirla, ma.. Dov'é il campo compleanno? O.o
Postate il LogCat LogCat LogCat LogCat LogCat

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Service sempre presente!
« Risposta #7 il: 21 Settembre 2010, 12:58:12 CEST »
0
Ho trovato android.intent.action.PACKAGE_INSTALL che forse fa a caso mio...
Mi sono scordato di questo: credo che PACKAGE_INSTALL serva ad intercettare l'installazione di qualunque applicazione, e che per essere utilizzato, la tua app debba già essere installata sul sistema. Penso lo utilizzino software come AppAware.

Mi sto sentendo un pirla, ma.. Dov'é il campo compleanno? O.o
Mmm in effetti non mi sembra si possano inserire/modificare tramite l'applicazione Contacts. Forse vanno inseriti direttamente da interfaccia web (tramite Gmail o Google Contacts).
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service sempre presente!
« Risposta #8 il: 21 Settembre 2010, 13:01:47 CEST »
0
Mi sa che questa applicazione sta diventando più didattica di quanto pensavo... quasi quasi la metto in Opensource e la implementiamo tutti quanti insieme!  o_O

Allora, su Google Contacts è possibile inserire la data di compleanno di un contatto, su android (almeno Froyo, ma se non ricordo male anche sulla 2.1) puoi inserire il compleanno di un contatto anche da Modifica Contatti -> Eventi -> Compleanno.

Sull'emulatore non esiste modo per impostare gli eventi legati ad un contatto (almeno non li abbiamo trovati).

Da codice, abbiamo Event.TYPE_BIRTHDAY, per capire se un dato evento è un compleanno!

Per quanto riguarda PACKAGE_INSTALL vorrei capire se vale anche per l'applicazione appena installata (cosa che non vale per PACKAGE_ADDED, visto che nella documentazione viene specificato che "Note that the newly installed package does not receive this broadcast." - non essendo scritto per PACKAGE_INSTALL spero che non valga questa regola!)

Ok, mi sa che dopo pranzo posto tutto il codice che ho scritto e continuiamo in un thread ad hoc!  8-)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Service sempre presente!
« Risposta #9 il: 21 Settembre 2010, 13:04:24 CEST »
0
OK
Off-Topic:
Se trovi il tempo, dai prima uno sguardo a questo :P
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Service sempre presente!
« Risposta #10 il: 21 Settembre 2010, 14:08:20 CEST »
0
su android (almeno Froyo, ma se non ricordo male anche sulla 2.1) puoi inserire il compleanno di un contatto anche da Modifica Contatti -> Eventi -> Compleanno.
Ehm.. non esiste da me la parte "eventi" o.O (froyo)
Postate il LogCat LogCat LogCat LogCat LogCat

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service sempre presente!
« Risposta #11 il: 21 Settembre 2010, 14:40:39 CEST »
0
Come non esiste la parte eventi??? Per un momento ho avuto il dubbio che l'avevo grazie a Sense, ma visto che anche JD l'ha... non so che pensare!  o_O

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Service sempre presente!
« Risposta #12 il: 21 Settembre 2010, 14:43:11 CEST »
0
No no, JD non ha proprio nulla per impostare i compleanni sul telefono :P
Io riesco solo a visualizzarli se li imposto da Gmail :)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service sempre presente!
« Risposta #13 il: 21 Settembre 2010, 14:45:42 CEST »
0
Quindi se andate su modifica contatto non vedete la sezione "Eventi"?

Allora è Sense!

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Service sempre presente!
« Risposta #14 il: 21 Settembre 2010, 14:51:43 CEST »
0
Già, ecco perché sconsiglio l'acquisto di telefoni con ROM custom quando servono per lo sviluppo di applicazioni :P.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !