Visto che prima o poi servirà anche a me e che non mi va di ritradurlo ogni volta, provo a fare una traduzione qui (speriamo decente) così potrà servirci in futuro.
(Rimetto il link
http://www.b4x.com/android/forum/th...cepting-sms-messages-in-the-background.20103/)
I "Broadcast receivers" sono "oggetti" che intercettano messaggi inviati "su tutto il sistema". Direi una specie di listeners. Ne metti uno in ascolto e quando gli arriva un "messaggio di sistema" che gli interessa, ci fai qualcosa.
Esistono due tipi di questi "ricevitori": statici e dinamici.
Quelli statici vanno dichiarati nel file Manifest, i dinamici si devono creare nel codice, utilizzando la libreria BroadcastReceiver. Ad esempio, gli oggetti PhoneEvents e SmsInterceptor della libreria Phone utilizzano quelli dinamici.
La differenza principale tra statici e dinamici è che questi ultimi rimangono in ascolto solo finché il processo (l'app, diciamo) è attiva, quelli statici sempre (nel senso che se il processo non è attivo, viene creato automaticamente).
Se si vuole sfruttare i ricevitori dinamici, si deve fare attenzione al fatto che le app in background possono essere "uccise" dal sistema. Per aggirare questo problema, si dovrebbe utilizzare un servizio con la chiamata al metodo Service.StartForeground, che comunque invia una notifica.
Quindi, se si vuole stare sempre in ascolto per intercettare un Intent (i messaggi di sistema), si dovrebbe utilizzare i ricevitori statici (alcuni intent possono essere intercettati solo dai ricevitori dinamici, però).
Ricevitori Statici.
I Service Module di B4A sono composti da due parti: il servizio e un ricevitore. E' il ricevitore che informa il servizio sugli Intent intercettati.
Ad esempio, quando si utilizza StartServiceAt, l'Intent viene intercettato dal ricevitore che, a sua volta, attiva il servizio.
Come detto prima, per utilizzare i ricevitori statici, si deve modificare il file Manifest, aggiungendo a questo un "Intent Filter", ovvero un filtro che indichi quale tipo di Intent vogliamo intercettare (
Intent Filters).
Come esempio, per intercettare gli SMS, si dovrà aggiungere il testo seguente al Manifest file:
AddPermission(android.permission.RECEIVE_SMS)
AddReceiverText(s1,
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>)
Nell'esempio, s1 è il nome del modulo di servizio che si usa per l'intercettazione.
______________________________________________________________________
Beh, non posto il codice del modulo di servizio che segue. Possiamo vederlo nella pagina originale.