为 MediaPlayer 实现 IOnErrorListener/IOnPreparedListener - Xamarin.Android (C#) API 29+

问题描述

我是新来的。这不是一个问题,而是一个解决方案,因为我没有找到一个论坛来回答我所关心的问题。

我在下载 MP3 文件时试图播放它(流式传输)。为此,我使用了 MediaPlayer。

我读到我应该实现 IOnErrorListener 和 IOnPreparedListener。

我找到的关于实施的每个解决方案都对我不起作用。

那是因为没有人指定您的类需要从 AppCompatActivity 继承。 如果您的类确实从 AppCompatActivity 继承,则实现应该只有一个函数。如果没有,它就会变成香蕉。

检查下图:

Implentation of IOnPreparedListner with & w/o inheriting from AppCompatActivity

这是我的工作代码示例:

using Android.App;
using Android.OS;
using Android.Runtime;
using AndroidX.AppCompat.App;
using Android.Media;
using Android.Widget;
using System;

namespace Test_MediaPlayerMP3Stream
{
    [Activity(Label = "@string/app_name",Theme = "@style/AppTheme",MainLauncher = true)]
    public class MainActivity : AppCompatActivity,MediaPlayer.IOnPreparedListener,MediaPlayer.IOnErrorListener
    {
        MediaPlayer mediaPlayer;
        Button btnPlay;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this,savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            btnPlay = FindViewById<Button>(Resource.Id.btnPlay);
            btnPlay.Click += btnPlay_Click;
        }

        private void btnPlay_Click(object sender,EventArgs e)
        {
            var ab = new AudioAttributes.Builder();
            ab.SetContentType(AudioContentType.Speech);
            ab.SetUsage(AudioUsageKind.Media);

            mediaPlayer = new MediaPlayer();
            mediaPlayer.SetonPreparedListener(this);

            mediaPlayer.SetAudioAttributes(ab.Build());
            mediaPlayer.SetDataSource("YourURL");
            mediaPlayer.PrepareAsync();
        }

        public void OnPrepared(MediaPlayer mp)
        {
            mp.Start();
        }
        public bool OnError(MediaPlayer mp,[GeneratedEnum] MediaError what,int extra)
        {
            mp.Reset();
            return false;
        }


        public override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);

            base.OnRequestPermissionsResult(requestCode,grantResults);
        }

    }
}

希望我能救人一些时间。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)