【发布时间】:2014-03-14 15:44:13
【问题描述】:
我正在研究一个简单的 AlarmManager 示例,但遇到了一个有趣的问题。我正在根据单击的按钮设置一个布尔值以通过我们的意图传递。有一个“重复警报”和“一次警报”按钮告诉我们是否应该重复我们的警报或有一次警报,我正在利用意图传递额外值的能力(intent.putExtra( "key","value");),没什么新鲜的,没什么特别的。我遇到的问题是,一旦设置了“密钥”,就无法重置。
我有一个包含该行的 MainActivity
AlarmReceiver alarm = new AlarmReceiver();
在该活动中,有 2 个按钮。如果我点击“重复报警”按钮,我会打电话
alarm.SetAlarm(context);
这是我的 AlarmReceiver 类中的方法:
// Set our repeating alarm
public void SetAlarm(Context context){
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent repeatIntent = new Intent(context, AlarmReceiver.class);
repeatIntent.putExtra("one_time", false); // this should change our boolean
PendingIntent pi = PendingIntent.getBroadcast(context, 0 , repeatIntent, 0);
// Set to go off after 5 seconds
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 5, pi);
}
如果我点击“一次性闹钟”按钮,我会打电话
alarm.SetOneTimeAlarm(context);
这是我的 AlarmReceiver 类中的方法:
// Set our one time alarm
public void SetOneTimeAlarm(Context context){
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent oneTimeIntent = new Intent(context, AlarmReceiver.class);
oneTimeIntent.putExtra("one_time", true); // this should change our boolean
PendingIntent pi = PendingIntent.getBroadcast(context, 0, oneTimeIntent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);
}
但是,在我的 AlarmReceiver 类的 onReceive() 方法中:
Bundle extras = intent.getExtras();
String messageString = "";
boolean oneTime = extras.getBoolean("one_time", false);
if(extras != null && oneTime == true){
messageString = messageString + "One time Timer : ";
}
else{
messageString = messageString + "Repeating Timer : ";
}
Format formatter = new SimpleDateFormat("hh:mm:ss a");
messageString = messageString + formatter.format(new Date());
Toast.makeText(context, messageString, Toast.LENGTH_LONG).show();
问题是,如果我点击“one time alarm”按钮,即使我点击“repeat alarm”按钮并尝试设置“one_time”,“one_time”布尔值也会设置为true并保持设置为true " 布尔为假(反之亦然)。从意图中覆盖附加内容是否存在问题?他们是否保存在某个地方并以不同的方式访问或其他什么?只是不知道为什么我不能在设置后更改该值。
【问题讨论】:
标签: android android-intent bundle