我有一个问题,无法解决,我今天花了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());
}
答案 0 :(得分:0)
这可能是三星在其较新的手机上的激进电池管理行为(在华为等许多其他品牌中)破坏了您的应用程序。
查看此网站:https://dontkillmyapp.com/
然后查看三星下面的注释:
Galaxy S8及更高版本 通过推出旗舰产品Galaxy S8(以及一些较早的实验),三星推出了一种有缺陷的尝试来延长电池寿命,称为App power monitor。
为使您的应用正常运行,请在应用电源监视器中将其列入白名单。
操作方法:
打开“设置”>“设备维护”>“电池”,然后在底部看到最常用的应用程序列表。您可以选择应用程序然后点按“省电”大按钮来单独或分组管理应用程序。正在休眠的应用程序将显示在底部的“正在休眠的应用程序”列表中(点击以展开列表)。一直滚动到最底端,您会发现“不受监视”的应用程序。这些应用是您明确想要从“应用程序电源监控器”邪恶影响范围中排除的(白名单)。
在“不受监视的应用”菜单中,您可以点击3点菜单以从列表中添加或删除应用。不必担心任何事情,您可以完全关闭App电源监控器功能,因为它对电池寿命几乎没有影响,并且只会损害Galaxy手机的正常功能。
这太过分了,在某些情况下甚至完全是误导,使用恐吓手段让您依赖三星的软件,而其他Android设备在没有它的情况下会很好。
先尝试一下。.让我知道之后是否还有任何问题。
如果您的代码可在其他设备或仿真器上运行,则应该是问题所在。