In the main activity, a layout is loaded that has some input fields and a submit button. When the submit button is clicked, the onClick handler method sends an sms back to the same mobile number :
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, "hi", null, null);
There is a broadcast receiver defined that intercepts the message :
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle pdusBundle = intent.getExtras();
Object[] pdus=(Object[])pdusBundle.get("pdus");
SmsMessage messages=SmsMessage.createFromPdu((byte[]) pdus[0]);
if(messages.getMessageBody().contains("hi")){
abortBroadcast();
}
}
}
Now, from the broadcast receiver, I want to call a function(with parameter), which is within my main activity. Is that possible? If yes, what kind of code should i add in my broadcast receiver ?
Thanks @Manishika. To elaborate, making the Broadcastreceiver dynamic, instead of defining it in the manifest, did the trick. So in my broadcast receiver class, i add the code :
In the end of the onReceive function of the BroadcastReceiver class, I call the main activity's function :
In the main activity, I dynamically define and register the broadcast receiver before sending the sms:
use this
You can't directly call a function in your Activity unless it's a public static method but don't do so. I recommend this:
And then from your Activity's
onCreate()
get Bundle and take your actions as needed.Pass your Activity's context to BroadcastReceiver's contructor.
and in your MainActivity
hope it helps
It's a little bit late, but nobody mentioned it. There is no need for passing activity. As @faizal specifies, IntentService is started from MainActivity, so,
context
inonReceive()
is already instance of MainActivity. It is enough to write smth like this: