繁体   English   中英

我在 Android 上的音频播放器不工作 - Xamarin

[英]My audio player on Android doesn't work - Xamarin

我使用 Xamarin 编写 C# Android 应用程序。 我写了这段代码:

protected MediaPlayer player;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.layout1);
        this.Window.AddFlags(WindowManagerFlags.Fullscreen);

        player = new MediaPlayer();
        player.Reset();
        var fileDescriptor = Assets.OpenFd("MySound.mp3");
        player.SetDataSource(fileDescriptor.FileDescriptor);
        player.Prepare();
        player.Start();
    }

MySound.mp3 文件直接位于 Assets 文件夹中。 当我运行应用程序时出现错误:

Java.IO.IOException 消息=准备失败。:状态=0x1

player.Prepare();

怎么了? 为什么它不起作用?

这似乎是 Android 设备上 MediaPlayer.Prepare() 的常见异常。 快速搜索结果如下:

https://social.msdn.microsoft.com/Forums/en-US/15f9c371-1b8d-4927-9555-f40e2829c377/mediaplayer-prepare-failed-stauts0x1?forum=xamarinandroid

匿名引用:

嗨,我浪费了很多时间,试图在我这边找到解决这个问题的方法。 所以我在这里发帖,以防万一它可以帮助一些人。 我的情况:我想从我的资产中加载一个音频文件(所以没有在我的资源中注册)。 我使用与 Ike Nwaogu 类似的代码,除了我使用 AssetFileDescriptor 打开我的文件(在我的活动类代码中,所以我可以访问“资产”):

 string path = "Audio/myfile.ogg"; Android.Content.Res.AssetFileDescriptor afd = Assets.OpenFd(path); MediaPlayer soundPlayer = new MediaPlayer(); if (afd != null) { soundPlayer.Reset(); soundPlayer.SetDataSource(afd.FileDescriptor); soundPlayer.Prepare(); soundPlayer.Enabled = true; afd.Close(); }

我在 Prepare() 上失败了。 我尝试添加对外部存储权限的访问(但它确实有意义,因为它是直接从我的资产加载的,我试过以防万一)。

偶然地,通过在论坛上看到其他人的示例,我将 afd.StartOffset、afd.DeclaredLength 添加到参数中:

soundPlayer.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.DeclaredLength);

它奏效了......我不知道这是否只是运气,以后是否会再次失败,或者API中是否存在错误......

根据各种来源,在设置 DataSource 时使用 getStartOffset 和 getLength 应该可以解决这个问题:

player.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());

或者,这里还有一些想法: Android MediaPlayer 在 2.1 上抛出“Prepare failed.: status=0x1”,适用于 2.2

https://forum.processing.org/two/discussion/6722/andriod-mediaplayer-prepare-failed-status-0x1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM