Reputation: 4317
I have an Activity that runs the following code (time and interval are defined):
Intent buzzIntent = new Intent(getBaseContext(), BuzzReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buzzIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
buzzIntent.putExtra("interval", interval);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, interval * 60 * 1000, pendingIntent);
and a BroadcastReceiver that has the following onReceive:
@Override
public void onReceive(Context context, Intent intent) {
try {
int interval = intent.getIntExtra("interval", -1);
<... more code ...>
} catch (Exception e) {
e.printStackTrace();
}
}
but the intent.getIntExtra() returns -1 (which isn't the value of interval in the Activity, I checked), so for some reason the BroadcastReceiver isn't getting the extras that I store into the intent in the Activity.
I've tried a ton of different things but nothing seems to work. Am I missing something here?
Upvotes: 4
Views: 5913
Reputation: 3341
Set flag FILL_IN_DATA
while creating pending intent as below:
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buzzIntent, Intent.FILL_IN_DATA);
You should receive extras in broadcast receiver after this change.
Upvotes: 22
Reputation: 1265
Have you tried calling buzzIntent.putExtra()
before you pass buzzIntent
to PendingIntent.getBroadcast()
?
Upvotes: 1
Reputation: 15267
Try following code
Bundle bundle = intent.getExtras();
int interval= bundle.getInt("interval", -1);
instead of
int interval = intent.getIntExtra("interval", -1);
Upvotes: 0