Ich hatte auch ein Problem mit Benachrichtigungen, die Ton ausgeben mussten. Als die App im Vordergrund stand, funktionierte alles korrekt, aber als die App im Hintergrund war, kam der Ton einfach nicht heraus.
Die Benachrichtigung wurde vom Server über FCM gesendet, dh der Server hat den JSON der Benachrichtigung bereitgestellt und an FCM gesendet, der die Benachrichtigung dann an die Apps sendet. Selbst wenn ich das Sound-Tag anbringe, kommt der Sound im Hintergrund nicht heraus.
Sogar das Setzen des Sound-Tags hat nicht funktioniert.
Nach so viel Suche fand ich die Lösung in einem Github-Forum. Ich bemerkte dann, dass es in meinem Fall zwei Probleme gab:
1 - Es fehlte das Senden des Tags channel_id, was für die Arbeit mit API-Level 26+ wichtig ist
2 - In der Android-Anwendung musste ich für diesen speziellen Fall, in dem Benachrichtigungen direkt vom Server gesendet wurden, die Kanal-ID im Voraus konfigurieren. In meiner Hauptaktivität musste ich den Kanal so konfigurieren, dass Android wusste, was wann zu tun ist Benachrichtigung angekommen.
In vom Server gesendetem JSON:
{
"title": string,
"body": string,
"icon": string,
"color": string,
"sound": mysound,
"channel_id": videocall,
}
In Ihrer Hauptaktivität:
@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);
}
}
Dies hat mein Problem endlich gelöst. Ich hoffe, es hilft jemandem, nicht 2 Tage wie ich zu verschwenden. Ich weiß nicht, ob es für alles notwendig ist, was ich in den Code eingefügt habe, aber das ist der Weg. Ich habe auch den Link zum Github-Forum nicht mehr gefunden, um die Antwort gutzuschreiben, da ich das gleiche getan habe, das dort gepostet wurde.