我已经创建了一个发送电子邮件的服务(email service)……每次我需要用我的应用发送电子邮件时,它都会启动服务并通过一个意图传递电子邮件的ID…
我使用startforeground(id_of_email, mynotifcation);
来防止它被杀死,并向用户显示电子邮件发送状态的通知。
我需要允许用户同时发送多封电子邮件,因此当用户需要发送另一封电子邮件时,它会再次以新的意图(电子邮件的不同ID)调用startservice
。因此它会再次调用startforeground(new_id_of_email, mynotifcation);
。
问题是对startforeground
的新调用覆盖了以前的通知…(因此用户失去了先前的通知,不知道先前的电子邮件发生了什么)
最佳答案
查看Service.startForeground()
源代码可以发现,多次调用startforeground只会替换当前显示的通知。事实上,对startforeground的调用与stopForeground()
相同,只是removeNotification
设置始终为true。
如果您希望服务为正在处理的每个电子邮件显示通知,则必须从服务中分别管理每个通知。
public final void startForeground(int id, Notification notification) {
try {
mActivityManager.setServiceForeground(
new ComponentName(this, mClassName), mToken, id,
notification, true);
} catch (RemoteException ex) {
}
}
public final void stopForeground(boolean removeNotification) {
try {
mActivityManager.setServiceForeground(
new ComponentName(this, mClassName), mToken, 0,
null, removeNotification);
} catch (RemoteException ex) {
}
}
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r1/android/app/Service.java#Service.startForeground%28int%2Candroid.app.Notification%29