Italian ricezione sms come servizio ed eseguire dei comandi

tmtube73

Active Member
Licensed User
buongiorno a tutti, vorrei creare una app che una volta avviata avvii un servizio sempre in ascolto magari che visualizza un icona nella barra di stato in alto

quando ricevo un sms, se questo sms contiene la stringa "123" allora chiamo una Sub di nome MieiComandi in cui

1 riaccendo lo schermo
2 avvio una app di nome "miaApp"

ho provato a cercare di capire l'esempio al link qui sotto ma non riesco a utilizzarlo per il mio scopo, qualcuno può darmi qualche aiuto? Grazie.


qui sotto vi riporto il codice inserito in manifest e il codice inserito nel modulo servizio "Starter"


Codice Manifest
B4X:
AddPermission(android.permission.RECEIVE_SMS)
AddReceiverText(Starter,
<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>)






Codice Servizio Starter
B4X:
#Region  Service Attributes
    #StartAtBoot: False
    #ExcludeFromLibrary: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Type Message (Address As String, Body As String)
    Dim Notification1 As Notification
End Sub

Sub Service_Create
    'This is the program entry point.
    'This is a good place to load resources that are not specific to a single activity.
    Notification1.Initialize
    Notification1.Icon = "restart1.png" 'use the application icon file for the notification
    Notification1.Vibrate = False
End Sub

Sub Service_Start (StartingIntent As Intent)
    Notification1.SetInfo("Ricezione SMS", "Downloading: ", Main)
    Service.StartForeground(1, Notification1)
    If StartingIntent.Action = "android.provider.Telephony.SMS_RECEIVED" Then
        Dim messages() As Message
        messages = ParseSmsIntent(StartingIntent)
        For i = 0 To messages.Length - 1
            Log(messages(i))
        Next
        ToastMessageShow("message received" & messages, True)
    End If
    Service.StopAutomaticForeground 'Call this when the background task completes (if there is one) cases.
End Sub

Sub Service_TaskRemoved
    'This event will be raised when the user removes the app from the recent apps list.
End Sub

'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub Service_Destroy

End Sub

Sub ParseSmsIntent (in As Intent) As Message()
    Dim messages() As Message
    If in.HasExtra("pdus") = False Then Return messages
    Dim pdus() As Object
    Dim r As Reflector
    pdus = in.GetExtra("pdus")
    If pdus.Length > 0 Then
        Dim messages(pdus.Length) As Message
        For i = 0 To pdus.Length - 1
            r.Target = r.RunStaticMethod("android.telephony.SmsMessage", "createFromPdu", _
            Array As Object(pdus(i)), Array As String("[B"))
            messages(i).Body = r.RunMethod("getMessageBody")
            messages(i).Address = r.RunMethod("getOriginatingAddress")
        Next
    End If
    Return messages
End Sub
 

tmtube73

Active Member
Licensed User
Grazie, c'è qualche esempio di app sempre attiva come servizio per ricevere messaggi da FirebaseCloudMessaging?

ho visto ora che il tuo link rimanda a un esempio grazie.
 

amorosik

Expert
Licensed User
Il modo migliore per ottenere ciò che vuoi è usare FirebaseCloudMessaging (anche, ma non solo, perché non riusciresti a mantere un servizio in ascolto sempre attivo)

No
Non e' il modo migliore, perche' l'utilizzo di fcm prevede che 'il ricevente' sia gia' bello e configurato con nome server, account, e altre amenita' simili
Mentre un sms lo ricevi sempre, senza configurare niente (a parte avere una sim inserita), su qualsiasi smartphone
 

LucaMs

Expert
Licensed User
Longtime User
No
Non e' il modo migliore, perche' l'utilizzo di fcm prevede che 'il ricevente' sia gia' bello e configurato con nome server, account, e altre amenita' simili
Mentre un sms lo ricevi sempre, senza configurare niente (a parte avere una sim inserita), su qualsiasi smartphone
Mentre con gli SMS:

1 - non riesci ad ottenere un servizio sempre in ascolto
2 - devi conoscere tutti i numeri delle SIM dei vari dispositivi
3 - non puoi inviarlo a dispositivi che non siano smartphone (tablet ed altri)
4 - devi intercettare l'SMS e non farlo visualizzare
5 - altre 7 o 8 cose 😄
 

amorosik

Expert
Licensed User
Mentre con gli SMS:
1 - non riesci ad ottenere un servizio sempre in ascolto
2 - devi conoscere tutti i numeri delle SIM dei vari dispositivi
3 - non puoi inviarlo a dispositivi che non siano smartphone (tablet ed altri)
4 - devi intercettare l'SMS e non farlo visualizzare
5 - altre 7 o 8 cose 😄

"...quando ricevo un sms, se questo ..."
Mentre usando fcm l'unica cosa che e' possibile fare e' NON rispondere alla domanda posta dall'utente 😅
 
Top