Autore Topic: Recuperare Activity che ha lanciato un intent  (Letto 826 volte)

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Recuperare Activity che ha lanciato un intent
« il: 08 Marzo 2011, 14:31:00 CET »
0
Ho un'activity che via intent fa partire un servizio locale.

Il Problema: il servizio utilizza delle notification  per avvisare l'utente di alcuni eventi. Quello che cerco di fare è poter notificarli dal servizio solo se la mia app è più visibile all'utente.

domanda per soluzione 1: c'è un modo generale per capire se la mia app ha delle activity visibili?

domanda per soluzione 2: dato che l'app è single-activity mi basterebbe sapere se è andata in onPause(). Dal servizio però non ho accesso all'istanza dell'activity chiamante.
Però la callback del servizio onStartCommand ha tra i suoi paramentri l'intent che l'ha invocato, c'è modo da questo di risalire all'activity che lo ha lanciato?

L'unica soluzione funzionante che mi viene in mente è estendere la classe Application e mettere li un riferimento all'activity e utilizzarlo come meglio credo.

Idee, risposte, soluzioni? :D

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recuperare Activity che ha lanciato un intent
« Risposta #1 il: 08 Marzo 2011, 15:27:13 CET »
0
Un'opzione potrebbe essere inserire una variabile statica che valorizzi opportunamente quando l'activity e' visibile :)

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Recuperare Activity che ha lanciato un intent
« Risposta #2 il: 08 Marzo 2011, 15:45:01 CET »
0
vero anche, forse è la cosa migliore. Tendo sempre a dimenticarmi delle variabili statiche :P

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Recuperare Activity che ha lanciato un intent
« Risposta #3 il: 08 Marzo 2011, 17:20:59 CET »
0
il problema l'ho risolto con la variabile statica e via...

però rimane la curiosità di rispondere a questa domanda: c'è un modo generale per capire se la mia app ha delle activity visibili?

Che dite?

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Recuperare Activity che ha lanciato un intent
« Risposta #5 il: 08 Marzo 2011, 18:06:04 CET »
0
Potresti, oltre che con una variabile statica, usare le SharedPreferences, settando un valore booleano, ad esempio notifica = true o notifica = false, ogni qualvolta è necessario, ad esempio settarla a false nell'onCreate dell'Activity e a true nell'onDestroy.
Secondo me è meglio attenersi ad una politica interna di gestione dell'app, piuttosto che usare controlli a livello di framework, ma questa è solo una mia opinione :-P

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recuperare Activity che ha lanciato un intent
« Risposta #6 il: 08 Marzo 2011, 18:23:16 CET »
0
Credo che per utilizare il framework propriamente creare un interfaccia tramite AIDL che ti permette di abilitare/disabilitare nel servizio il fatto che le notifiche vengano lanciate o meno. Poi fai il bind al servizio e utilizzare questi metodi.
Un po' come spiegato qui [Difficile] Servizio remoto + BroadcastReceiver - Android Developers Italia

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Recuperare Activity che ha lanciato un intent
« Risposta #7 il: 08 Marzo 2011, 19:16:27 CET »
0
Citazione da: Ricky`
Credo che per utilizare il framework propriamente creare un interfaccia tramite AIDL...
Alla faccia della politica interna di gestione  :D

Anche se creare comunicazioni interprocesso per questo dato problema, a parer mio sia un po' eccessivo :-P
Comunque l'AIDL è un'ottima materia di studio. Tuttavia riferendosi esclusivamente al problema del topic, non credo ci siano processi separati da gestire, anche perchè il Service non è un processo separato dell'applicazione, ma è parte di essa. Si potrebbe implementare un handler volendo, però se non ci sono multi-processi da gestire perchè complicarsi la vita :-P
Ovviamente questo è un mio parere completamente opinabile.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recuperare Activity che ha lanciato un intent
« Risposta #8 il: 08 Marzo 2011, 20:11:40 CET »
0
AIDL può essere usato anche per comunicazione dentro al processo stesso :p
Secondo me eprò è inutile... tantovale usare la variabile statica :)