8

我有一项服务可以抓取网站的数据,然后在必要时向用户发出通知。

我遇到的问题是,一旦服务关闭(可能是立即的)通知就会消失。以下代码是应用程序具有的所有通知代码。我没有输入任何代码来取消通知。

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 进行测试。

4

4 回答 4

4

您发布的代码有效。我从 jb 上的活动和服务中对其进行了测试,并且当组件停止时通知仍然存在。我什至证实我可以终止进程并且通知仍然存在。尝试剥离应用程序,看看问题是否仍然存在。具体检查以查看您没有错误地在通知上调用取消。

于 2012-09-06T20:38:46.207 回答
2

您似乎忘记先查看开发人员手册。请参阅此处http://developer.android.com/guide/topics/ui/notifiers/notifications.html并查找 FLAG_ONGOING_EVENT 和 FLAG_NO_CLEAR 标志。

到目前为止,我只能使用 ICS 进行测试。

这就是模拟器非常有用的原因。试试看。它是 SDK 的一部分。

于 2012-07-17T11:48:32.203 回答
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);
}
于 2012-09-12T03:51:19.910 回答
1

请注意,当使用 startForeground() 然后调用 stopSelf() 时会发生此行为。

于 2018-04-06T09:16:14.980 回答