2010-09-16 73 views
13

我通过使用AlarmManager和BroadcastReceiver类(名为AReceiver.java)为我的程序添加了一些基本的报警功能。我的问题是,我添加到附加到创建PendingIntent的Intent的包中的数据似乎丢失了。我可以在AReceiver类中访问的唯一bundle数据是android.intent.extra.ALARM_COUNT = 1。将PendingIntent的Bundle发送到广播接收器时出错,数据丢失

这里是在主活动类创建意图的基本代码,的PendingIntent和AlarmManager: [代码中的主要活动 - Notepadv3]

Intent intent = new Intent(Notepadv3.this, AReceiver.class);   
intent.putExtra("teststring","hello, passed string in Extra");    
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, pendingPeriodIntentId, intent, 0);  
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);   
am.set(AlarmManager.RTC_WAKEUP, timeOfNextPeriod.getTimeInMillis(), alarmIntent); 

[代码在广播接收器 - AReceiver]

public void onReceive(Context con, Intent arg1) { 
Bundle extrasBundle = arg1.getExtras(); 
Log.d("broadcast","contains teststring = " + extrasBundle.containsKey("teststring")); 
Log.d("broadcast","is empty? = " + extrasBundle.isEmpty()); 
Log.d("broadcast","to string = " + extrasBundle.toString()); 
    } 

调试消息说包含teststring为FALSE,为空是FALSE,当输出整个包时,我得到android.intent.extra.ALARM_COUNT = 1的值。

任何帮助将不胜感激。

干杯, 汤姆

回答

33

你必须改变这一行

PendingIntent alarmIntent = PendingIntent.getBroadcast(this, pendingPeriodIntentId, intent, 0); 

这个

PendingIntent alarmIntent = PendingIntent.getBroadcast(this, pendingPeriodIntentId, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

否则数据丢失

+0

谢谢!这是修复,我已经搜索高和低来获得正确的参数。再次感谢。 – 2010-09-18 06:07:57

+0

奇怪的是,在Android 4.0.3模拟器上它可以与0和PendingIntent.FLAG_UPDATE_CURRENT – max4ever 2012-11-27 10:00:53

+2

一起使用,但是当你使用后者时,它会覆盖任何*现有的*额外值。这意味着如果我们想添加新的附加功能并保留现有功能,则不起作用。正常情况下,传递0作为标志会导致这种情况发生(例如,如果调用PendingIntent发送而不是使用AlarmManager调度它)。是什么赋予了? – Michael 2013-05-30 02:32:01