Android + Xamarin推送通知自定义声音无法播放

时间:2016-08-23 17:12:57

标签: android xamarin notifications push

我一直在使用Android Xamarin应用中播放自定义声音的简单概念,但无论我尝试什么声音都无法播放。

我创造了一个" raw"资源下的文件夹,并添加了适当的声音文件。我确保该文件是作为Android资源构建的。

这是我的代码:

// note I have also tried just /raw/NotificationSound, /integeridofresource and many other formats
string sSoundUrl = "android.resource://" + AppGlobals.PackageName + "/raw/NotificationSound.wav";

Notification nNotification = new Notification.Builder(this.Activity).SetSmallIcon(Resource.Drawable.AppIcon)
                .SetContentTitle("Test title")
                .SetContentText("Hello notifications")
                .SetAutoCancel(true)
                .SetSound(Android.Net.Uri.Parse(sSoundUrl)).Build();

// I have tried 0, All, NotificationDefaults.Sound basically all different  combinations
nNotification.Defaults = NotificationDefaults.Lights;

NotificationManager nmNotManager = (NotificationManager)this.Activity.GetSystemService(Context.NotificationService);

nmNotManager.Notify(0, nNotification);

我希望有人能发现我做错了什么......

感谢!!!

2 个答案:

答案 0 :(得分:2)

看起来你很接近,你的代码和我们在几个Xamarin.Android应用程序中工作的东西之间只有一些细微的差别。

我认为显着的区别在于我们使用GcmListenerService - 派生类作为上下文而不是this.Activity,我们省略了" .wav"在路径中的扩展,我们为通知生成唯一的ID,我们设置了一个意图。

以下是一些显示方法的代码:

        var intent = new Intent(context, typeof(MainActivity));
        intent.PutExtra(MainActivity.GoToAction, action);
        intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
        var pushId = DateTime.Now.TimeOfDay.Milliseconds;
        var pendingIntent = PendingIntent.GetActivity(context, pushId, intent, PendingIntentFlags.OneShot);

        // Set custom push notification sound.
        var pathToPushSound = "android.resource://" + context.ApplicationContext.PackageName + "/raw/pushalert";
        var soundUri = Android.Net.Uri.Parse(pathToPushSound);

        var notificationBuilder = new Android.App.Notification.Builder(context)
            .SetSmallIcon(Resource.Drawable.icon_transparent)
            .SetContentTitle(title)
            .SetContentText(message)
            .SetAutoCancel(true)
            .SetSound(soundUri)
            .SetStyle(new Android.App.Notification.BigTextStyle().BigText(message))
            .SetVibrate(new long[] {100, 1000, 100})
            .SetLights(Android.Resource.Color.HoloOrangeDark, 1, 1)
            .SetContentIntent(pendingIntent);

        var notificationManager = (NotificationManager) context.GetSystemService(Context.NotificationService);
        notificationManager.Notify(pushId, notificationBuilder.Build());

答案 1 :(得分:1)

嗯,我想我终于搞清楚了。如果你的声音有问题,我建议:1)像我一样创建一个Media Player对象,看看它是否可以播放你的Uri 2)检查以确保你为Notification对象设置了正确的默认值。在我的情况下,我将默认值设置为0并播放声音......