У мене також були проблеми з повідомленнями, які повинні були видавати звук, коли програма була на передньому плані, все працювало правильно, однак, коли програма була у фоновому режимі, звук просто не виходив.
Повідомлення було надіслане сервером через FCM, тобто сервер встановив JSON сповіщення та надіслав його FCM, який потім надсилає повідомлення додаткам. Навіть якщо я ставлю звукову мітку, звук не виходить у фоновому режимі.
Навіть ставлення звукової позначки це не спрацювало.
Після стільких пошуків я знайшов рішення на форумі github. Потім я помітив, що в моєму випадку було дві проблеми:
1 - Не вдалося надіслати тег channel_id, важливий для роботи на рівні API 26+
2 - У додатку Android, у цьому конкретному випадку, коли сповіщення надсилалися безпосередньо з сервера, мені довелося налаштувати ідентифікатор каналу заздалегідь, тому в моїй головній діяльності мені довелося налаштувати канал, щоб Android знав, що робити, коли надійшло повідомлення.
У JSON, надісланому сервером:
{
"title": string,
"body": string,
"icon": string,
"color": string,
"sound": mysound,
"channel_id": videocall,
}
У вашій головній діяльності:
@Background
void createChannel(){
Uri sound = Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" + R.raw.app_note_call);
NotificationChannel mChannel;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mChannel = new NotificationChannel("videocall", "VIDEO CALL", NotificationManager.IMPORTANCE_HIGH);
mChannel.setLightColor(Color.GRAY);
mChannel.enableLights(true);
mChannel.setDescription("VIDEO CALL");
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
mChannel.setSound(sound, audioAttributes);
NotificationManager notificationManager =
(NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(mChannel);
}
}
Це нарешті вирішило мою проблему, сподіваюся, це допоможе комусь не витрачати 2 дні, як я. Не знаю, чи потрібно це для всього, що я вкладаю в код, але це шлях. Я також не знайшов посилання на форум github для підтвердження відповіді, оскільки те, що я зробив, було тим самим, що було розміщено там.