【发布时间】:2012-03-18 20:36:24
【问题描述】:
我有 3 个活动
A. MainActivity - 只是一个带有文本和按钮的 Activity
B. SettingsActivity - 如果单击 (A) 上的按钮,将显示此活动,这将初始化时间选择器,当它发出警报时将发送通知
C. DisplayNotification - 用于在状态栏中显示通知的活动,单击时应显示 A
这就是我想要发生的事情:
- 我启动我的应用程序,将显示 A
- 点击按钮,会显示B
- 我设置了闹钟时间
- 触发警报时,状态栏中会显示通知
- 如果我点击通知,将显示 A
这就是发生的事情(我有 2 个结果不同的场景):
第一个场景:
- 在第 3 步之后,我点击返回按钮,现在将显示 A
- 然后,我再次点击返回按钮,将调用 A 的 onDestroy,屏幕将显示手机的“主页”或“桌面”
- 我等到警报触发
- 触发警报时,状态栏上会显示通知
- 我点击通知,它会启动我的应用并显示 A
- 故事结束。这是预期会发生的事情
第二种情况:(有车的)
- 在第3步之后,我点击HOME按钮,A的onDestroy还没有被调用,最新的屏幕是B
- 屏幕显示手机的“主页”或“桌面”
- 我等到警报触发
- 当警报触发时,通知会显示在状态栏上,并且 B 会自动显示而无需我点击状态栏上的通知
- 我想在这里发生的是它不应该自动显示 B 活动。
我是否缺少通知或意图的任何标志?
这里是触发警报的Activity B的代码sn-p
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent(this, DisplayNotification.class);
i.putExtra("NotifID", 1);
PendingIntent displayIntent = PendingIntent.getActivity(getBaseContext(), 0, i, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, displayIntent);
这是活动 C 的代码
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int notifID = getIntent().getExtras().getInt("NotifID");
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("NotifID", notifID);
PendingIntent detailsIntent = PendingIntent.getActivity(this, 0, i, 0);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notif = new Notification(R.drawable.ic_launcher, "See activity!", System.currentTimeMillis());
notif.flags |= Notification.FLAG_AUTO_CANCEL;
notif.defaults |= Notification.DEFAULT_SOUND;
CharSequence from = "Notification from me";
CharSequence message = "See activity!";
notif.setLatestEventInfo(this, from, message, detailsIntent);
nm.notify(notifID, notif);
finish();
}
希望有人能帮助我:)
谢谢!
编辑:
感谢 Chirag_CID!我应该使用广播接收器而不是另一个活动。因此,DisplayNotification 现在扩展了广播接收器,而不是扩展 Activity。这是DisplayNotification的onReceive方法:
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "DisplayNotification onReceive");
int notifID = intent.getExtras().getInt("NotifID");
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("NotifID", notifID);
PendingIntent detailsIntent = PendingIntent.getActivity(context, 0, i, 0);
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = new Notification(R.drawable.ic_launcher, "See the quote of the day!", System.currentTimeMillis());
notif.flags |= Notification.FLAG_AUTO_CANCEL;
notif.defaults |= Notification.DEFAULT_SOUND;
CharSequence from = "Notification";
CharSequence message = "See the activity!";
notif.setLatestEventInfo(context, from, message, detailsIntent);
nm.notify(notifID, notif);
}
【问题讨论】:
标签: android android-intent notifications android-activity