Exception when trying to run SetOn implements from the MediaPlayer Xamarin API

0

When I run my Xamarin Forms application with the MediaPlayer API of the error and the program stops running from these lines below;

player.SetOnBufferingUpdateListener (this);

player.SetOnCompletionListener (this);

player.SetOnErrorListener (this);

player.SetOnPreparedListener (this);

player.SetOnSeekCompleteListener (this);

Note if I comment the lines above my application works, but with the lines above commented I will not have the function to go through all the songs.

using Android.App;
using Android.Media;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Java.Lang;
using System.IO;
using static Android.Media.MediaPlayer;

namespace AppExemploMediaPlayer
{
[Activity(Label = "AppExemploMediaPlayer", MainLauncher = true)]
public class MainActivity : Activity, IOnPreparedListener, IOnCompletionListener, IOnSeekCompleteListener, IOnBufferingUpdateListener, IOnErrorListener
{
    private MediaPlayer player;
    private MediaPlayer nextPlayer;
    private TextView tvTime;
    private long currentTime;
    private long duration;
    private bool isPlaying;

    Button playButton;
    Button pauseButton;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        tvTime = (TextView)FindViewById(Resource.Id.tvTime);

        if(savedInstanceState != null)
        {
            duration = savedInstanceState.GetLong("duration");
            currentTime = savedInstanceState.GetLong("currentTime");
            isPlaying = savedInstanceState.GetBoolean("isPlaying");

            if (isPlaying)
            {
                //playButton.Click();
            }
        }

        playButton = FindViewById<Button>(Resource.Id.btnPlay);

        pauseButton = FindViewById<Button>(Resource.Id.btnPause);
        Button stopButton = FindViewById<Button>(Resource.Id.btnStop);

        playButton.Click += delegate {

            if (player == null)
            {
                try
                {                        
                    var asset = Assets.OpenFd("tubarao.mp3");
                    player = new MediaPlayer();
                    player.SetDataSource(asset.FileDescriptor, asset.StartOffset, asset.Length);
                    player.PrepareAsync();

                    nextPlayer = new MediaPlayer();
                    nextPlayer.SetAudioStreamType(Android.Media.Stream.Music);
                    nextPlayer.SetDataSource("http://www.nossaquelegal.com.br/musica/starwars.mp3");
                    nextPlayer.PrepareAsync();

                    // ERRO AO EXECUTAR ESTAS INSTRUÇÕES
                    player.SetOnBufferingUpdateListener(this);
                    player.SetOnCompletionListener(this);
                    player.SetOnErrorListener(this);
                    player.SetOnPreparedListener(this);
                    player.SetOnSeekCompleteListener(this);

                }
                catch (IllegalArgumentException e) { e.PrintStackTrace(); }
                catch (SecurityException e) { e.PrintStackTrace(); }
                catch (IllegalStateException e) { e.PrintStackTrace(); }
                catch (IOException e) { e.Message.ToString(); }
            }
            else
            {
                player.Start();
            }
        };
    }

    protected override void OnSaveInstanceState(Bundle outState)
    {
        base.OnSaveInstanceState(outState);

        outState.PutLong("duration", duration);
        outState.PutLong("currentTime", currentTime);
        outState.PutBoolean("isPlaying", isPlaying);
    }

    protected override void OnPause()
    {
        base.OnPause();

        if(player != null)
        {
            duration = player.Duration;
            currentTime = player.CurrentPosition;
        }
    }

    protected override void OnDestroy()
    {
        base.OnDestroy();

        if(player != null)
        {
            player.Stop();
            player.Release();
            player = null;
        }
    }

    public void pauseMusic(View v)
    {
        isPlaying = false;

        if (player != null)
        {
            player.Pause();
        }
    }

    public void stopMusic(View v)
    {
        isPlaying = false;

        if (player != null)
        {
            player.Stop();
            player.Release();
            player = null;
            currentTime = 0;
        }
    }

    /* LISTENERS */
    public virtual void OnPrepared(MediaPlayer mp)
    {
        Log.Info("Script", "OnPrepared");

        isPlaying = true;

        mp.Start();
        mp.SetNextMediaPlayer(nextPlayer);
        mp.SetVolume(1, 1);
        mp.SeekTo((int)currentTime);
    }

    public virtual void OnCompletion(MediaPlayer mp)
    {
        Log.Info("Script", "OnCompletion");

        mp.Start();
        mp.SetNextMediaPlayer(nextPlayer);

    }

    public virtual void OnSeekComplete(MediaPlayer mp)
    {
        Log.Info("Script", "OnSeekComplete");
    }

    public virtual void OnBufferingUpdate(MediaPlayer mp, int percent)
    {
        Log.Info("Script", "OnBufferingUpdate");
    }

    public virtual bool OnError(MediaPlayer mp, [GeneratedEnum] MediaError what, int extra)
    {
        Log.Info("Script", "OnError");
        return false;
    }
}

}

    
asked by anonymous 24.01.2018 / 01:37

0 answers