Push notification Xamarin Android使用SetSound for Notification频道在通知时播放自定义声音

Push notification Xamarin Android使用SetSound for Notification频道在通知时播放自定义声音,push-notification,xamarin.android,customization,Push Notification,Xamarin.android,Customization,我已经浪费了至少一天的时间来让这一切顺利进行。我正在尝试播放一个mp3文件,一旦收到通知,我就会将其放入参考资料/raw中。我不知道如何获取Uri。我的问题是: 1.要播放自定义文件,您必须将其放在Resources/raw中,还是也可以放在Xamarin Android项目下的Assets/Sounds中 2.如何根据mp3文件所在的位置正确获取Uri 这是我的代码: private void createNotificationChannel() {

我已经浪费了至少一天的时间来让这一切顺利进行。我正在尝试播放一个mp3文件,一旦收到通知,我就会将其放入参考资料/raw中。我不知道如何获取Uri。我的问题是:

1.要播放自定义文件,您必须将其放在Resources/raw中,还是也可以放在Xamarin Android项目下的Assets/Sounds中

2.如何根据mp3文件所在的位置正确获取Uri

这是我的代码:

private void createNotificationChannel()
        {
            var channelName = GetString(Resource.String.noti_chan_urgent);
            var channelDescription = GetString(Resource.String.noti_chan_urgent_description);

            // set the vibration patterm for the channel
            long[] vibrationPattern = { 100, 200, 300, 400, 500, 400, 300, 200, 400 };

            // Creating an Audio Attribute
            var alarmAttributes = new AudioAttributes.Builder().SetUsage(AudioUsageKind.Alarm).Build();

            // Create the uri for the alarm file
            var alarmUri = Android.Net.Uri.Parse("MyApp.Android/Resources/raw/alarm.mp3");   // this must be wrong because its not working


            // create chan1  which is the urgent notifications channel
            var chan1 = new NotificationChannel(PRIMARY_CHANNEL_ID, channelName, NotificationImportance.High)
            {
                Description = channelDescription
            };


            // set the channel properties
            chan1.EnableLights(true);
            chan1.LightColor = Color.Red;
            chan1.EnableVibration(true);   
            chan1.SetVibrationPattern(vibrationPattern);
            chan1.SetSound(alarmUri, alarmAttributes);
            chan1.SetBypassDnd(true);
            chan1.LockscreenVisibility = NotificationVisibility.Public;


            var manager = (NotificationManager)GetSystemService(NotificationService);
            manager.CreateNotificationChannel(chan1);
        }

    }

我发现了这一点,我希望这会比在一个问题上投反对票更好,这就是你如何做到的: (注意:请确保将mp3文件放在Xamarin Android项目的资源/raw/soundFile.mp3下,并将文件构建为Android资源

然后像这样创建Uri:

Android.Net.Uri alarmUri = Android.Net.Uri.Parse(${ContentResolver.SchemeAndroidResource}://{Context.PackageName}/{Resource.Raw.soundFile}");
var alarmAttributes = new AudioAttributes.Builder()
               .SetContentType(AudioContentType.Sonification)
               .SetUsage(AudioUsageKind.Notification).Build();
创建报警属性,如下所示:

Android.Net.Uri alarmUri = Android.Net.Uri.Parse(${ContentResolver.SchemeAndroidResource}://{Context.PackageName}/{Resource.Raw.soundFile}");
var alarmAttributes = new AudioAttributes.Builder()
               .SetContentType(AudioContentType.Sonification)
               .SetUsage(AudioUsageKind.Notification).Build();
最后,只在Android Oreo之后的频道上设置频道(不在通知上,在应用程序启动时创建频道):


我发现了这一点,我希望这会比在一个问题上投反对票更好,这就是你如何做到的: (注意:请确保将mp3文件放在Xamarin Android项目的资源/raw/soundFile.mp3下,并将文件构建为Android资源

然后像这样创建Uri:

Android.Net.Uri alarmUri = Android.Net.Uri.Parse(${ContentResolver.SchemeAndroidResource}://{Context.PackageName}/{Resource.Raw.soundFile}");
var alarmAttributes = new AudioAttributes.Builder()
               .SetContentType(AudioContentType.Sonification)
               .SetUsage(AudioUsageKind.Notification).Build();
创建报警属性,如下所示:

Android.Net.Uri alarmUri = Android.Net.Uri.Parse(${ContentResolver.SchemeAndroidResource}://{Context.PackageName}/{Resource.Raw.soundFile}");
var alarmAttributes = new AudioAttributes.Builder()
               .SetContentType(AudioContentType.Sonification)
               .SetUsage(AudioUsageKind.Notification).Build();
最后,只在Android Oreo之后的频道上设置频道(不在通知上,在应用程序启动时创建频道):


uri=Android.Net.uri.Parse( “android.resource://“+Application.Context.PackageName+”/raw/sound2”)

我唯一需要做的改变。对弗雷德索姆的回答

安卓9。 visualstudio 2019 xamarin.forms移动ios android。sound2.mp3


正在运行一个android无法播放的文件,因此请确保下载一个mp3文件以进行测试,并验证其是否正常工作

uri=Android.Net.uri.Parse( “android.resource://“+Application.Context.PackageName+”/raw/sound2”)

我唯一需要做的改变。对弗雷德索姆的回答

安卓9。 visualstudio 2019 xamarin.forms移动ios android。sound2.mp3


正在运行一个android无法播放的文件,因此请确保下载一个mp3文件以进行测试,并验证其是否正常工作

你可以投反对票,但仍然可以回答问题。我一直在网上查找这个问题,包括Xamarin文档,但是没有明确的答案,很多人都问过这个问题。在这种情况下,不是我的问题没有帮助,而是否决票。所以我投了反对票。你可以投反对票,但仍然回答问题。我一直在网上查找这个问题,包括Xamarin文档,但是没有明确的答案,很多人都问过这个问题。在这种情况下,不是我的问题没有帮助,而是否决票。所以我投了反对票。请再解释一下你的答案。请再解释一下你的答案。