首页 > 解决方案 > 在手机 xamarin 表单上播放标准/系统声音

问题描述

是否有标准的跨平台方式在 Xamarin Forms iOS 和 Android 上播放 250 毫秒左右的“叮当”?

马克·沃德尔

标签: xamarinxamarin.forms

解决方案


您可以使用DependencyService在每个平台播放默认的系统通知声音。

创建IPlaySoundService接口:

public interface IPlaySoundService 
{
    void PlaySystemSound();
}

在iOS中实现该PlaySystemSound方法如下:

[assembly: Xamarin.Forms.Dependency(typeof(PlaySoundService))]
namespace AppCarouselViewSample.iOS
{
    public class PlaySoundService : IPlaySoundService
    {
        public void PlaySystemSound()
        {    
            var sound = new SystemSound(1000);
            sound.PlaySystemSound();
        }
    }
}

在Android中实现该PlaySystemSound方法如下:

[assembly:Xamarin.Forms.Dependency(typeof(PlaySoundService))]
namespace AppCarouselViewSample.Droid
{
    public class PlaySoundService : IPlaySoundService
    {
        public void PlaySystemSound()
        {
            Android.Net.Uri uri = RingtoneManager.GetDefaultUri(RingtoneType.Ringtone);
            Ringtone rt = RingtoneManager.GetRingtone(MainActivity.instance.ApplicationContext, uri);
            rt.Play();
        }
    }
}

这是instance来自MainActivity的定义:

namespace xxx.Droid
{
    [Activity(Label = "AppCarouselViewSample", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        public static MainActivity instance { set; get; }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            instance = this;

            Xamarin.Forms.Forms.SetFlags(new string[] { "CarouselView_Experimental", "SwipeView_Experimental", "IndicatorView_Experimental" });
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());


        }
...
}

然后他们将在每个平台播放默认通知声音。您可以SystemSoundID在 iOS 中进行修改以适合您的需要。这里是声音 ID 列表


推荐阅读