【发布时间】:2010-04-11 11:36:15
【问题描述】:
我有一个 Android 应用程序需要在一天中不时唤醒。
为此,我使用 AlarmManager 来设置 PendingIntent 并让它触发一个 BroadcastReceiver。然后此 BroadcastReceiver 启动一个 Activity 以将 UI 带到前台。
以上所有方法似乎都有效,因为 Activity 可以正确启动;但我希望 BroadcastReceiver 通知 Activity 它是由警报启动的(而不是由用户启动的)。为此,我正在尝试从 BroadcastReceiver 的 onReceive() 方法在意图的附加包中设置一个变量,因此:
Intent i = new Intent(context, MyActivity.class);
i.putExtra(wakeupKey, true);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
在我的 Activity 的 onResume() 方法中,然后我寻找这个布尔变量的存在:
protected void onResume() {
super.onResume();
String wakeupKey = "blah";
if (getIntent()!=null && getIntent().getExtras()!=null)
Log.d("app", "onResume at " + System.currentTimeMillis() + ":" + getIntent().getExtras().getBoolean(wakeupKey));
else
Log.d("app", "onResume at " + System.currentTimeMillis() + ": null");
}
onResume() 中的 getIntent().getExtras() 调用总是返回 null - 我似乎无法在这个包中传递任何额外内容。
如果我使用相同的方法将额外内容绑定到触发 BroadcastReceiver 的 PendingIntent,那么额外内容就会很好地通过。
谁能告诉我将包从广播接收器传递到活动与将包从活动传递到广播接收器有什么不同?我担心我可能会在这里做一些非常明显的错误......
【问题讨论】:
-
好奇者和好奇者......它刚刚开始工作(在模拟器中),正如我所期望的那样。反复工作了一段时间。我关闭了模拟器,重新启动(没有任何代码更改或重新编译),然后我又回到了旧的行为(活动启动但没有 Bundle 通过)。我仍然可以看到两次运行的日志 - 在前者中,Bundles 正在通过,在后者中没有。
标签: android android-intent bundle broadcastreceiver alarm