通知未显示,因为服务或报警管理器已关闭



我遇到了一个无法解决的问题,今天我花了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());
}

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

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

看看三星下面的笔记:

Galaxy S8及更高版本随着旗舰Galaxy S8的推出(以及早期的一些实验),三星推出了一种有缺陷的延长电池寿命的尝试,称为应用程序电源监视器。

为了让你的应用程序正常工作,请在应用程序电源监视器中将它们列入白名单。

如何做到:

打开"设置">"设备维护">"电池",您会在底部看到最常用的应用程序列表。您可以单独或成组管理应用程序,方法是选择它们,然后点击"保存电源"大按钮。正在睡眠的应用程序将出现在底部的"睡眠应用程序"列表中(点击它可展开列表)。再往下滚动——一直滚动到最底部——你会发现未监控的应用程序。这些是你特别想从应用程序电源监视器邪恶范围中排除的应用程序(白名单)。

在Unmonitored apps(未监控的应用程序)菜单中,您可以点击3点菜单从列表中添加或删除应用程序。与其为此烦恼,你可以完全关闭应用程序电源监视器功能,因为它对电池寿命几乎没有影响,只会阻碍Galaxy手机的正常运行。

这是过分的,在某些情况下是彻头彻尾的误导,当其他安卓设备没有三星的软件时,使用恐吓策略让你依赖三星的软件。

先试试这个。。如果在这之后还有任何问题,请告诉我。

如果您的代码在其他设备或模拟器上工作,这应该是问题所在。

相关内容

最新更新