我有一个运行以下代码的Activity(定义了时间和间隔):
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);
以及具有以下onReceive的BroadcastReceiver:
@Override
public void onReceive(Context context, Intent intent) {
try {
int interval = intent.getIntExtra("interval", -1);
<... more code ...>
} catch (Exception e) {
e.printStackTrace();
}
}
但是intent.getIntExtra()返回-1(这不是Activity中的interval值,我检查过),所以由于某种原因,BroadcastReceiver没有得到我存储在intent中的extras活性。
我尝试了很多不同的东西,但似乎没有任何效果。我在这里错过了什么吗?
答案 0 :(得分:16)
在创建待处理意图时设置标记FILL_IN_DATA
,如下所示:
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buzzIntent, Intent.FILL_IN_DATA);
此更改后,您应该在广播接收器中收到额外内容。
答案 1 :(得分:0)
尝试以下代码
Bundle bundle = intent.getExtras();
int interval= bundle.getInt("interval", -1);
而不是
int interval = intent.getIntExtra("interval", -1);
答案 2 :(得分:0)
您是否尝试过调用buzzIntent.putExtra()
之前将buzzIntent
传递给PendingIntent.getBroadcast()
?