微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为 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 举报,一经查实,本站将立刻删除。