Hello I have an app which uses a Service to Catch SMS messages.
To recreate the problem:
1. Run the App.
2. Send an SMS from a different phone to your phone.
3. Read the logs.
What happens now is on the first SMS received the service is Created. CallSub isn't called.
On the second SMS received the service has already been created. CallSub is called.
In my Main:
In my Service:
I have attached a demo project to show this off.
Any ideas?
To recreate the problem:
1. Run the App.
2. Send an SMS from a different phone to your phone.
3. Read the logs.
What happens now is on the first SMS received the service is Created. CallSub isn't called.
On the second SMS received the service has already been created. CallSub is called.
In my Main:
B4X:
Public Sub Set_Message(msg As Message) As String
Log("Trying to set Message")
Log("Message Set")
Return "SET"
End Sub
In my Service:
B4X:
Sub Service_Start (StartingIntent As Intent)
If StartingIntent.Action = "android.provider.Telephony.SMS_RECEIVED" Then
Dim messages() As Message
messages = ParseSmsIntent(StartingIntent)
Dim test As String
test = TryToSetMessage(messages)
Log(test)
End If
End Sub
Sub Service_Destroy
End Sub
Sub TryToSetMessage(messages() As Message) As String
Dim test As String
For i = 0 To messages.Length - 1
If(messages(i).Address == "000-000-000") Then
Log("This is the correct Number")
test = CallSub2(Main, "Set_Message", messages(i))
Log(test)
Log("Tried to send message!")
Else
Log("Incorrect number")
test = CallSub2(Main, "Set_Message", messages(i))
Log(test)
Log("Failed to send message!")
End If
Next
If test = "SET" Then
Return "Sub Called Successfully"
Else
Return "Sub Not Called Successfully"
End If
End Sub
'Parses an SMS intent and returns an array of messages
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
I have attached a demo project to show this off.
Any ideas?