我有一项服务可以在网站上搜索数据,然后在必要时向用户发送通知。
我遇到的问题是,一旦服务关闭(可能是即时的),通知就会消失。以下代码是应用程序的所有通知代码。我没有输入任何代码来取消通知。
public static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx)
{
Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link));
PendingIntent contentIntent = PendingIntent.getActivity(ctx.getApplicationContext(), 0, notificationIntent, 0);
NotificationManager nm = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx);
Resources res = ctx.getResources();
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.notify_icon)
.setWhen(System.currentTimeMillis())
.setContentTitle(title)
.setContentText(text)
.setAutoCancel(false);
Notification n = builder.getNotification();
nm.notify(notificationID, n);
}
如果它有任何区别(很确定它没有)我在这里使用应用程序上下文。
我的服务定期启动,处理网站,如果需要通知然后关闭。
在我的服务结束时,而不是只是调用stopSelf(),我睡了30秒左右,然后调用stopSelf()。然后通知停留30秒然后消失。在通知消失时,logcat中没有任何相关内容。
到目前为止,我只能使用ICS进行测试。
答案 0 :(得分:4)
您发布的代码有效。我在jb上的活动和服务上测试了它,并且当组件停止时通知保持不变。我甚至证实我可以杀死进程并且通知仍然存在。尝试删除应用程序,看看问题是否仍然存在。具体检查是否错误地通知了取消通知。
答案 1 :(得分:2)
您似乎忘记了先查看开发人员手册。请参阅此处http://developer.android.com/guide/topics/ui/notifiers/notifications.html并查找FLAG_ONGOING_EVENT和FLAG_NO_CLEAR标记。
到目前为止,我只能使用ICS进行测试。
这就是模拟器非常有用的原因。试试吧。它是SDK的一部分。
答案 2 :(得分:1)
请在同一设备上尝试旧方式并告诉我们它的行为是否相同:
private static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) {
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) ctx.getSystemService(ns);
Notification notification = new Notification(R.drawable.notify_icon, title, System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL;
PendingIntent contentIntent;
Bundle bundle = new Bundle();
Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link));
contentIntent = PendingIntent.getActivity(ctx, notificationID,
notificationIntent, 0);
notification.setLatestEventInfo(ctx, title, text,
contentIntent);
mNotificationManager.notify(notificationID, notification);
}
答案 3 :(得分:1)
请注意,当使用startForeground()然后调用stopSelf()时会发生此行为。