I am trying to send primitive data from a class extending IntentService
to a class extending a BroadcastReceiver
, however, data received in the BroadcastReceiver
is null
.
In my IntentService
class, I have the following code
Intent smsListener = new Intent(ScheduledRepliesService.this, SmsListener.class);
smsListener.putExtra("reply", reply);
smsListener.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(smsListener);
I can guarantee that reply
is not null in IntentService
class.
I retrieve it in onReceive
method in BroadcastReceiver
class with
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
String replyMessage = intent.getStringExtra("reply");
...
}
...
}
I have declared the receiver in Manifest.xml
file
<receiver android:name=".utilities.sms.SmsListener">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
and can confirm that if replyMessage
string is not null
, code produces no errors.
I would appreciate your help, thank you.
Although I was not able to find an answer to my problem, I did a bit of a workaround, and it does solve my problem. I hope this answer will be useful for somebody else as well.
I have a foreground service responsible for creating notifications when SMS message is received and a broadcast receiver whose task is to return said message body and sender number.
I was thinking in the wrong direction, sending data from service to receiver, but it should be the other way around.
Create an interface
public interface SmsListener {
public void messageReceived(String messageSender, String messageText);
}
and use this code in broadcast receiver
public class SmsBroadcastReceiver extends BroadcastReceiver {
//Interface
private static SmsListener smsListener;
@Override
public void onReceive(Context context, Intent intent) {
//Get data to a Bundle
Bundle data = intent.getExtras();
//PDUs represent received SMS message(s)
assert data != null;
Object[] pdus = (Object[]) data.get("pdus");
for (int i = 0; i < pdus.length; i++) {
//Reconstruct SMS message from pdus object
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = smsMessage.getDisplayOriginatingAddress();
String messageBody = smsMessage.getDisplayMessageBody();
//SmsListener's callback method
smsListener.messageReceived(sender, messageBody);
}
}
//Bind listener for the use in ScheduledRepliesService
public static void bindListener(SmsListener listener) { smsListener = listener; }
}
and lastly, retrieve the SMS message contents and sender number (as string) in service
//Get SMS message data from SmsBroadcastReceiver
SmsBroadcastReceiver.bindListener(new SmsListener() {
@Override
public void messageReceived(String messageSender, String messageText) {
//TODO: do something in here
....
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.