Я хочу воспроизвести пользовательский mp3, помещенный в папку res / raw, при push-уведомлении, но он всегда воспроизводит звук уведомления по умолчанию на моем телефоне. Я использовал xamarin, и мой тестовый телефон - Android 8.1. Даже на более ранних версиях не всегда воспроизводится кастомный звук. Следующий код помещается в метод OnMessageReceived. Уведомление от FCM содержит только тег данных, а не тег уведомления. Кроме того, шаблон вибрации, кажется, всегда по умолчанию. Иконка и текст отлично работает.
NotificationManager notificationManager = (NotificationManager)this.GetSystemService(Context.NotificationService);
//Setting up Notification channels for android O and above
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
SetupChannels(notificationManager, messageTitle);
}
var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
.SetSmallIcon(Resource.Drawable.icon)
.SetContentTitle(messageTitle)
.SetContentText(messageBody)
.SetAutoCancel(true)
.SetDefaults((int)NotificationDefaults.All)
.SetSound(global::Android.Net.Uri.Parse("android.resource://" + this.ApplicationContext.PackageName + "/raw/de900"))
.SetVibrate(new long[] { 1000, 500, 1000, 500 })
.SetContentIntent(pendingIntent)
.SetStyle(new NotificationCompat.BigTextStyle().BigText(messageBody));
notificationManager.Notify(MainActivity.NOTIFICATION_ID, notificationBuilder.Build());
}
private void SetupChannels(NotificationManager notificationManager, string description)
{
// AudioAttributes.Builder.
NotificationChannel channel = new NotificationChannel(MainActivity.CHANNEL_ID, "EmersyChannel", NotificationImportance.Max)
{
LockscreenVisibility = NotificationVisibility.Public,
Description = description
};
var audioattributes = new AudioAttributes.Builder();
audioattributes.SetContentType(AudioContentType.Music);
audioattributes.SetUsage(AudioUsageKind.Notification);
channel.SetSound(global::Android.Net.Uri.Parse("android.resource://" + this.ApplicationContext.PackageName + "/raw/de900"),
audioattributes.Build());
channel.EnableVibration(true);
channel.SetVibrationPattern(new long[] { 100, 30, 100, 30, 100, 200, 200, 30, 200, 30, 200, 200, 100, 30, 100, 30, 100, 100, 30, 100, 30, 100, 200, 200, 30, 200, 30, 200, 200, 100, 30, 100, 30, 100 });
channel.EnableLights(true);
channel.LightColor = Color.Red;
channel.SetShowBadge(true);
if (notificationManager != null)
{
notificationManager.CreateNotificationChannel(channel);
}
}