Italian QUalcuno ha fatto qualcosa con SMS e interceptor

Pisinho

Active Member
Licensed User
Longtime User
Buongiorno,
volevo sapere o meglio chiedervi un aiuto per scrivere qualcosa che mi intercetti un messaggio SMS e gestirlo in base al contenuto. Ho visto che ci sono altre richieste in Question ma non ho capito molto sul da farsi. Personalmente basta capire come funziona poi il resto cercherò di svilupparlo io.
Grazie a tutti.
 

Pisinho

Active Member
Licensed User
Longtime User
SI ma non c'ho capito niente... non è spiegato molto bene....
La documentazione per lo meno per me non è ben fatta... meno male che ci siete voi esperti..
 

LucaMs

Expert
Licensed User
Longtime User
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:
B4X:
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.
 

Pisinho

Active Member
Licensed User
Longtime User
Grazie Luca,
guardando il codice un pochino inizio a capirci qualcosa...però...
Secondo te, se volessi far eseguire in base al CORPO del MESSAGGIO, dove devo scrivere il codice...nel modulo del servizio (credo)
o c'è qualche altro sistema ?
 

LucaMs

Expert
Licensed User
Longtime User
Beh, io non ho mai provato, ma penso che il modulo del servizio non sia il posto giusto, quello dovrebbe solo informarti dell'arrivo del SMS (a meno che tu non voglia filtrare i messaggi arrivati per scartare quelli che non ti interessano, allora sarebbe il posto giusto).

Per elaborarli, probabilmente dovresti aggiungere qualcosa del genere:
CallSub2("main", "Elabora", Messaggi)

meglio ancora se diversa dalla Main e Elabora è il nome di una routine col parametro
Messaggi() as Message
 

Pisinho

Active Member
Licensed User
Longtime User
SI, vorrei filtrare il messaggio ed in base al contenuto aprire un'Activity o fargli fare qualcosa al cellulare...per esempio.
 

LucaMs

Expert
Licensed User
Longtime User
Uhm... non devo cercare un sito, probabilmente.

Tempo fà (non DIMENTICATE mai che... ho la memoria corta :D) provai qualcosa sugli SMS e li inviai ad un emulatore tramite Eclipse. Non so se sia possibile inviarli anche allo smartphone, proverò.


[AGGIORNAMENTO] Sugli emulatori funziona, sul mio smarphone no, ma io ho problemi col driver, forse a voi funziona
 
Last edited:

Pisinho

Active Member
Licensed User
Longtime User
Sto facendo delle prove ma non riesco a passargli il contenuto del messaggio alla mia Activity 'Main'... mi dice che sbaglio il tipo di dato..
 
Top