Даже если я использую каналы для этих API, у меня есть служба переднего плана, которая, кажется, не в состоянии отправлять не текущие уведомления на API> 26 (oreo).
На api ниже, уведомление показывает правильно.
Ниже мой код, который отправляет уведомления:
private void notification(String content) {
Random random = new Random();
int id = random.nextInt(1000)+1;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
NotificationChannel chan = new NotificationChannel(STANDARD_NOTIFICATION_CHANNEL_ID, standardChannelName, NotificationManager.IMPORTANCE_NONE);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
assert manager != null;
manager.createNotificationChannel(chan);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, STANDARD_NOTIFICATION_CHANNEL_ID);
Notification notification = notificationBuilder.setOngoing(false)
.setSmallIcon(android.R.drawable.btn_dropdown)
.setContentTitle(content)
.setPriority(NotificationManager.IMPORTANCE_DEFAULT)
.setCategory(Notification.CATEGORY_SERVICE)
.build();
// TODO we need to see how to send not ongoing notifications in our case with API > 26
manager.notify(id,notification);
}
else {
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, STANDARD_NOTIFICATION_CHANNEL_ID);
Notification notification = notificationBuilder.setOngoing(false)
.setSmallIcon(R.drawable.ic_launcher_fury)
.setContentTitle(content)
.build();
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(id,notification);
}
}
Единственное уведомление, которое отображается правильно, - это текущее уведомление, которое показывает пользователю, что услуга находится на переднем плане. Я называю это так:
@Override
public void onCreate() {
super.onCreate();
Random random = new Random();
int id = random.nextInt(1000);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startMyOwnForeground();
}
else {
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, FOREGROUND_NOTIFICATION_CHANNEL_ID);
Notification notification = notificationBuilder.setOngoing(true)
.setSmallIcon(R.drawable.ic_launcher_fury)
.setContentTitle(getResources().getString(R.string.app_is_in_background))
.build();
startForeground(id, notification);
}
}
@RequiresApi(Build.VERSION_CODES.O)
private void startMyOwnForeground()
{
Random random = new Random();
int id = random.nextInt(1000);
NotificationChannel chan = new NotificationChannel(FOREGROUND_NOTIFICATION_CHANNEL_ID, foregroundChannelName, NotificationManager.IMPORTANCE_NONE);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
assert manager != null;
manager.createNotificationChannel(chan);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, FOREGROUND_NOTIFICATION_CHANNEL_ID);
Notification notification = notificationBuilder.setOngoing(true)
.setSmallIcon(android.R.drawable.btn_dropdown)
.setContentTitle(getResources().getString(R.string.app_is_in_background))
.setPriority(NotificationManager.IMPORTANCE_MIN)
.setCategory(Notification.CATEGORY_SERVICE)
.build();
startForeground(id, notification);
}
У вас есть какие-нибудь подсказки?