为什么 android 通知不是每 2 分钟后出现一次?

Why android notifications are not occurring after every 2 mins?

我试图每 2 分钟创建一个通知,但是,只有一个通知被创建(当应用程序启动时)。 我的代码是:

notifyme.java :

public class notifyme extends Service {
    @Override
    public void onCreate() {
     super.onCreate();

    Intent intent=new Intent(this,MainActivity.class);

    TaskStackBuilder stackBuilder=TaskStackBuilder.create(this);
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(intent);

    PendingIntent pendingIntent=stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder notify=new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("Hello")
            .setContentText("Some random text")
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setContentIntent(pendingIntent)
            .setAutoCancel(true);

    NotificationManager nMgr=(NotificationManager)this.getSystemService(this.NOTIFICATION_SERVICE);
    Random r=new Random();
    int nid=r.nextInt(50000)+1;
    nMgr.notify(nid,notify.build());
}





@Override
public IBinder onBind(Intent intent) {
    return null;
}
}

在MainActivity.java中:

Intent notificationIntent = new Intent(this, notifyme.class);
PendingIntent contentIntent =       PendingIntent.getService(getApplicationContext(), 0, notificationIntent,0);
AlarmManager am = (AlarmManager) getSystemService(this.ALARM_SERVICE);
am.cancel(contentIntent);
am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),120*1000, contentIntent);

首先,每两秒发送一次新通知是完全违反准则的。

正如 docs 所说:

When you need to issue a notification multiple times for the same type of event, you should avoid making a completely new notification. Instead, you should consider updating a previous notification, either by changing some of its values or by adding to it, or both.

此处的问题是您使用相同的 ID 来创建通知。 (这里是 19)。

当您发布一个通知时,如果有一个具有相同id的活动通知。通知管理器将更新现有的。所以每次服务是 运行,它只是更新 ID 为“19”的通知。

如果您热衷于每 2 分钟发布一次通知(这将非常严重地影响您应用的用户体验,让我警告您),请尝试为通知提供不同的 ID。您可以将发布的 id 保存在 SharedPreferences 或其他东西中。

首先,您不需要整个服务来显示通知,如果仅此而已,您可以使用 BroadcastReceiver 并使用 PendingIntent.getBroadcast 方法。 BroadcastReceiver 需要更少的内存并且没有任何生命周期(这可能会使事情复杂化)。

您没有看到多个通知的原因是 nMgr.notify(119,notify.build());

这个数字119是通知ID。所以在它再次执行该代码的 X 秒后,你的新通知直接替换了旧的通知,它看起来好像没有改变。

如果您想设置多个通知(也就是向用户发送垃圾邮件),您应该始终更改该号码。也许使用 Random