Tôi cũng gặp sự cố với các thông báo phải phát ra âm thanh, khi ứng dụng ở chế độ nền mọi thứ hoạt động chính xác, tuy nhiên khi ứng dụng ở chế độ nền, âm thanh không phát ra.
Thông báo được gửi bởi máy chủ thông qua FCM, tức là máy chủ đã gắn JSON của thông báo và gửi nó đến FCM, sau đó sẽ gửi thông báo đến các ứng dụng. Ngay cả khi tôi đặt thẻ âm thanh, âm thanh không phát ra ở âm thanh phía sau.
Ngay cả việc đặt thẻ âm thanh nó cũng không hoạt động.
Sau rất nhiều tìm kiếm, tôi đã tìm thấy giải pháp trên diễn đàn github. Sau đó, tôi nhận thấy rằng có hai vấn đề trong trường hợp của tôi:
1 - Việc gửi thẻ channel_id bị thiếu, điều quan trọng là phải hoạt động ở cấp API 26+
2 - Trong ứng dụng Android, đối với trường hợp cụ thể này khi thông báo được gửi trực tiếp từ máy chủ, tôi phải định cấu hình id kênh trước, vì vậy trong Hoạt động chính của tôi, tôi phải định cấu hình kênh để Android biết phải làm gì khi thông báo đã đến.
Trong JSON do máy chủ gửi:
{
"title": string,
"body": string,
"icon": string,
"color": string,
"sound": mysound,
"channel_id": videocall,
}
Trong Hoạt động chính của bạn:
@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);
}
}
Điều này cuối cùng đã giải quyết được vấn đề của tôi, tôi hy vọng nó sẽ giúp ai đó không lãng phí 2 ngày như tôi đã làm. Tôi không biết liệu nó có cần thiết cho mọi thứ tôi đặt trong mã hay không, nhưng đây là cách. Tôi cũng không tìm thấy liên kết diễn đàn github để ghi nhận câu trả lời nữa, bởi vì những gì tôi đã làm giống với một liên kết được đăng ở đó.