Воспроизведение стандартного / системного звука на телефоне xamarin форм - PullRequest
0 голосов
/ 19 апреля 2020

Существует ли стандартный кроссплатформенный способ проигрывания 250 мс или около того «дина» на формах Xamarin iOS и Android?

Марк Уорделл

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Вы можете использовать DependencyService для воспроизведения звука системных уведомлений по умолчанию на каждой платформе.

Создание IPlaySoundService Интерфейс:

public interface IPlaySoundService 
{
    void PlaySystemSound();
}

Реализация метода PlaySystemSound в iOS следующим образом:

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

Реализуйте метод PlaySystemSound в Android следующим образом:

[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 в соответствии с вашими потребностями. Вот Список звуковых идентификаторов .

0 голосов
/ 22 апреля 2020

вот моя сейчас компилируемая, но сбойная реализация Droid

using Android .Media; использование TripCalculator.Droid.Services;

[assembly: Xamarin.Forms.Dependency(typeof(PlaySoundService))]
// Crashes
namespace TripCalculator.Droid.Services
{
    public class PlaySoundService : IPlaySoundService
    {
        public void PlaySystemSound()
        {
            var currentContext = Android.App.Application.Context;
            Android.Net.Uri uri = RingtoneManager.GetDefaultUri(RingtoneType.Ringtone);

            Ringtone rt = RingtoneManager.GetRingtone(currentContext.ApplicationContext, uri);
            rt.Play();
        }
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...