【问题标题】:How can you play an AudioFile that will keep playing even if you navigate through pages in Xamarin Forms?即使您在 Xamarin Forms 中浏览页面,如何播放仍会继续播放的音频文件?
【发布时间】:2016-11-29 00:31:24
【问题描述】:

我正在尝试制作自己的音乐应用程序。使用我在 iOS 中的依赖服务解决方案,我可以很好地听到 mp3,但是一旦我浏览其他页面,文件就会停止。所以我的问题是,即使我在“播放”文件后浏览不同的页面,如何才能使文件继续播放?

这是我的代码: 我选择“曲目”的按钮。

async void PlayThisSongButton (object s, EventArgs e)
    {
        DependencyService.Get<IPlayerVoice>().PlayAudioFile("myfilename.mp3");
    }

界面:

public interface IPlayerVoice
{
    void PlayAudioFile(string fileName);
}

依赖服务iOS:

[assembly: Xamarin.Forms.Dependency(typeof (VoicePlayer_iOS))]

namespace myProject.iOS
{
  public class VoicePlayer_iOS : IPlayerVoice
  {
    AVAudioPlayer player;

    public VoicePlayer_iOS()
    {
    }

    public void PlayAudioFile(string fileName)
    {
        string sFilePath = NSBundle.MainBundle.PathForResource
        (Path.GetFileNameWithoutExtension(fileName), Path.GetExtension(fileName));
        var url = NSUrl.FromString(sFilePath);
        var _player = AVAudioPlayer.FromUrl(url);
        _player.FinishedPlaying += (object sender, AVStatusEventArgs e) =>
        {
            _player = null;
        };
        _player.Play();
     }

   }
}

因此,使用此当前代码。我点击我的按钮开始音频文件。然后我导航到另一个页面。音频文件停止。知道如何解决这个问题吗?

【问题讨论】:

标签: c# xamarin xamarin.forms


【解决方案1】:

我从未在 Xamarin Forms 中处理过音频,但研究过一次。

我认为当用户离开页面时,来自@yanyankelevich 的带有 GitHub 链接的评论仍然会停止音频。

正如@yanyankelevich 所建议的那样,使用后台服务可能是您最好的选择。一些链接(有很多代码,所以我不会在这篇文章中复制它):

iOS AVAudioPlayer(具体查看PlayBackgroundMusic方法和下面的其他背景相关方法)

Android Background Audio Streaming

对于一种超级简单的方法(我不建议并且从未尝试过),您是否尝试过在 Device.BeginInvokeOnMainThread() 中运行您的方法,这会引发火灾并忘记?

Device.BeginInvokeOnMainThread(() => DependencyService.Get<IPlayerVoice>().PlayAudioFile("myfilename.mp3"));

【讨论】:

  • 尝试了该代码 sn-p 但然后根本没有声音。我会检查你的链接! :)
  • @CarlosRodrigez 试试我对简单示例的编辑(不确定音频代码是否需要在 UI 线程上运行......)
  • 我喜欢当您将 xamarin 表单和 IOS 混合使用时,一项如此简单且通常的任务如何变成疯狂的代码。
  • @yanyankelevich 哈哈完全同意,虽然我责怪 iOS 多于 Xamarin。尤其是在 iOS 上,它们一开始是 iPod ......他们现在应该把这些东西完美地放下;)
  • 当我推送到其他页面时它会停止,但我确实从命令中听到了声音
【解决方案2】:

我会说你需要使用 MVVM 或 MVC 并在主视图上运行音乐。

这将允许您在播放音乐的同时浏览应用程序。

基本上有主视图并创建一个放置“browserView”的网格 在中,将您将用于应用程序的所有正常代码添加到浏览器的视图模型中。

然后将音乐的代码添加到主视图的视图模型中。

只需确保添加暂停音乐的功能即可。

【讨论】:

  • OP 询问有关在 Xamarin Forms(本机应用程序)上播放音频的问题,而不是通过网站。
  • 对,但您在谈论浏览器,并且谈论的方法在 Xamarin 表单中的工作方式与它们在网站中的工作方式不同。
  • 我只是使用了“browserView”这个名称,来说明命名视图将是浏览他的应用程序的视图。
  • 明白。我想一般来说你的答案可能适用于多个平台。
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2016-02-04
  • 2014-01-26
相关资源
最近更新 更多