Autore Topic: Come abilitare e disabilitare un receiver  (Letto 1760 volte)

Offline ligio

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
    • Ligio Blog
  • Dispositivo Android:
    htc wildfire, ZT180 v2
  • Play Store ID:
    Marco Lijoi
  • Sistema operativo:
    Windows Vista
Come abilitare e disabilitare un receiver
« il: 16 Aprile 2011, 12:03:55 CEST »
0
Ciao a tutti!
Ho creato un'applicazione che parte allo startup del sistema.
Per far questo, ho dichiarato nel manifest un receiver che avvia la classe BootLoad in questo modo:

Codice (XML): [Seleziona]
<receiver android:exported="false" android:name="BootLoad" android:enabled="true">
   <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
   </intent-filter>
</receiver>

Se adesso volessi fare in modo che l'utente possa decidere se avviare oppure no l'applicazione all'avvio di Android, come posso fare?
Io ho pensato di aggiungere nella classe BootLoad un controllo di una SharedPreference, ma non mi sembra una soluzione molto "elegante"...

C'è un altro modo per disabilitare il BroadcastReceiver?
Ovvero: è possibile cambiare a runtime il valore di android:enabled="true" ad android:enabled="false" nella dichiarazione del receiver nell'AndroidManifest ?

Grazie a tutti!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Come abilitare e disabilitare un receiver
« Risposta #1 il: 18 Aprile 2011, 12:06:16 CEST »
0
Scusa.
Se dai la possibilità all'utente di scegliere se abilitare o meno al boot l'applicazione, devi salvarti queste informazioni da qualche parte...diciamo in una shared preferences.
A questo punto, per modificare al volo il valore di un xml che è all'interno di un'app installata, dovresti leggerti queste sharedpreferences e settare il valore: stai facendo un passaggio in più.
Inoltre, quello che è stato evidenziato non si può fare.
La soluzione che tu scarti perché poco elegante, in realtà rientra nel normale utilizzo del concetto di preferences dell'utente; inoltre, a me sembra pure elegante, come soluzione.
;)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

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:Come abilitare e disabilitare un receiver
« Risposta #2 il: 18 Aprile 2011, 12:12:41 CEST »
0
La soluzione che tu scarti perché poco elegante, in realtà rientra nel normale utilizzo del concetto di preferences dell'utente; inoltre, a me sembra pure elegante, come soluzione.

Quoto!  8-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come abilitare e disabilitare un receiver
« Risposta #3 il: 18 Aprile 2011, 12:15:40 CEST »
0
Effettivamente è elegante ed è proprio come farei io (visto che non è possibile fare altrimenti) però soffre di un piccolo difetto:
Il receiver viene chiamato in ogni caso e solo li dentro verifichi se devi fare o meno le operazioni in base al valore letto dalle SharedPreferences.
Questo talvolta è un po' fastidioso visto che il processo deve essere attivato per fare questo controllo.

Offline ligio

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
    • Ligio Blog
  • Dispositivo Android:
    htc wildfire, ZT180 v2
  • Play Store ID:
    Marco Lijoi
  • Sistema operativo:
    Windows Vista
Re:Come abilitare e disabilitare un receiver
« Risposta #4 il: 18 Aprile 2011, 22:41:29 CEST »
0
Vi ringrazio per le risposte, ma come dice Ricky il problema è che il receiver viene avviato lo stesso solo per controllare una SharedPreference e poi "morire"!
Insomma, uno spreco di risorse secondo me!

E poi mi chiedo: come mai nell'AndroidManifest nella dichiarazione del receiver devo mettere android:enabled="true" ?
Se esiste questo parametro, allora ci sarà pure il modo di modificare questo valore a runtime, no?
Ho appena scoperto l'esistenza del metodo Context.unregisterReceiver, ma non ho capito se si può applicare anche ai Receiver registrati tramite AndroidManifest.
Vi farò sapere!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re: Come abilitare e disabilitare un receiver
« Risposta #5 il: 18 Aprile 2011, 22:46:32 CEST »
0
Si può usare solo per i receiver registrati via java.
« Ultima modifica: 18 Aprile 2011, 23:30:21 CEST da Ricky` »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Come abilitare e disabilitare un receiver
« Risposta #6 il: 19 Aprile 2011, 08:47:47 CEST »
0
Vi ringrazio per le risposte, ma come dice Ricky il problema è che il receiver viene avviato lo stesso solo per controllare una SharedPreference e poi "morire"!
Insomma, uno spreco di risorse secondo me!

E poi mi chiedo: come mai nell'AndroidManifest nella dichiarazione del receiver devo mettere android:enabled="true" ?
Se esiste questo parametro, allora ci sarà pure il modo di modificare questo valore a runtime, no?
Ho appena scoperto l'esistenza del metodo Context.unregisterReceiver, ma non ho capito se si può applicare anche ai Receiver registrati tramite AndroidManifest.
Vi farò sapere!

Un utilizzo di questo flag potrebbe essere quello di abilitarlo/disabilitarlo in fase di sviluppo.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come abilitare e disabilitare un receiver
« Risposta #7 il: 16 Maggio 2011, 16:52:20 CEST »
0
Spulciando nelle slide del Google IO forse ho trovato un modo per fare questa cosa:
Codice (Java): [Seleziona]
ComponentName receiver = new ComponentName(this, TuoBroadcastReceiver.class);
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(receiver, VALORE, 0);

dove VALORE può essere PackageManager.COMPONENT_ENABLED_STATE_ENABLED oppure PackageManager.COMPONENT_ENABLED_STATE_DISABLED

Appena ho tempo lo provo, se lo provi prima tu fammi sapere se funziona :)
« Ultima modifica: 16 Maggio 2011, 16:54:05 CEST da Ricky` »