由于服务或警报管理器被终止而未显示通知

时间:2019-01-10 14:16:27

标签: android service notifications alarmmanager system

我有一个问题,无法解决,我今天花了7个小时来寻找解决方案。我正在尝试为我的应用显示通知。它在具有较旧操作系统版本的较旧设备上运行良好,但是在运行Oreo API 27的Note 8上,我的通知未显示。我花了数小时的时间进行测试,但发现了一个问题:在应用程序运行且应用程序打开时,将显示通知,但是当我退出该应用程序时,不会显示通知。因此,我认为这与系统处理服务的方式有关。

这是正常行为吗?有办法解决吗?

这是我的通知代码:

onCreate...
 if (settings.getBoolean("enabled", true)) {
            if (settings.getLong("lastRun", Long.MAX_VALUE) < System.currentTimeMillis() - mTimeDelay) {
                sendNotification();
            }
        }

        setAlarm();
        stopSelf();
}
  public void setAlarm() {

        Intent serviceIntent = new Intent(this, CheckRecentRun.class);
        PendingIntent pi = PendingIntent.getService(this, 131313, serviceIntent, PendingIntent.FLAG_CANCEL_CURRENT);

        AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + mTimeDelay, pi);
        //Alarm is set for 3 days
    }

    public void sendNotification() {
        Intent intent = new Intent(this, WelcomeActivity.class);
        NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);



        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel mChannel = notificationManager.getNotificationChannel(channelId);
            if (mChannel == null) {
                mChannel = new NotificationChannel(channelId, channelName, importance);
                mChannel.setDescription(mNotificationText);
                mChannel.enableLights(false);
                mChannel.setLightColor(Color.GREEN);
                mChannel.setShowBadge(false);
                notificationManager.createNotificationChannel(mChannel);
            }
        }

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, channelId).setStyle(new NotificationCompat.BigTextStyle().bigText(mNotificationText)).setSmallIcon(R.mipmap.ic_launcher).setContentTitle(mAppName).setContentText(mNotificationText).setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(false);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addNextIntent(intent);
        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(mNotificationCode, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(resultPendingIntent);

        notificationManager.notify(notificationId, mBuilder.build());
    }

1 个答案:

答案 0 :(得分:0)

这可能是三星在其较新的手机上的激进电池管理行为(在华为等许多其他品牌中)破坏了您的应用程序。

查看此网站:https://dontkillmyapp.com/

然后查看三星下面的注释:

Galaxy S8及更高版本 通过推出旗舰产品Galaxy S8(以及一些较早的实验),三星推出了一种有缺陷的尝试来延长电池寿命,称为App power monitor。

为使您的应用正常运行,请在应用电源监视器中将其列入白名单。

操作方法:

打开“设置”>“设备维护”>“电池”,然后在底部看到最常用的应用程序列表。您可以选择应用程序然后点按“省电”大按钮来单独或分组管理应用程序。正在休眠的应用程序将显示在底部的“正在休眠的应用程序”列表中(点击以展开列表)。一直滚动到最底端,您会发现“不受监视”的应用程序。这些应用是您明确想要从“应用程序电源监控器”邪恶影响范围中排除的(白名单)。

在“不受监视的应用”菜单中,您可以点击3点菜单以从列表中添加或删除应用。不必担心任何事情,您可以完全关闭App电源监控器功能,因为它对电池寿命几乎没有影响,并且只会损害Galaxy手机的正常功能。

这太过分了,在某些情况下甚至完全是误导,使用恐吓手段让您依赖三星的软件,而其他Android设备在没有它的情况下会很好。

先尝试一下。.让我知道之后是否还有任何问题。

如果您的代码可在其他设备或仿真器上运行,则应该是问题所在。