You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin Forms中实现从本地文件夹播放音频功能

Xamarin.Forms Android/iOS 本地文件夹音频播放分步实现指南

1. 前期准备

  • 确保你的Xamarin.Forms项目版本在5.0以上,Android目标版本不低于Android 10.0 (API 29),iOS最低支持版本不低于iOS 14.0
  • 统一使用Plugin.MediaManagerNuGet包实现跨平台音频渲染,无需单独手写原生底层逻辑

2. 共享项目配置

  • 右键解决方案 -> 管理NuGet包,为共享项目、Android项目、iOS项目同时安装相同版本的Plugin.MediaManager包
  • 共享项目中编写通用播放逻辑,示例代码如下:
using Plugin.MediaManager;
using Plugin.MediaManager.Abstractions.Enums;

public async Task PlayLocalAudio(string audioFileName)
{
    string localAudioPath = string.Empty;
    // 适配双平台应用沙盒Documents目录路径规则
    if(Device.RuntimePlatform == Device.Android)
    {
        localAudioPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), audioFileName);
    }
    else if(Device.RuntimePlatform == Device.iOS)
    {
        localAudioPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), audioFileName);
    }
    // 传入本地路径触发播放
    await CrossMediaManager.Current.Play(localAudioPath, MediaFileType.Audio);
}

3. Android端专属配置

  • 打开AndroidManifest.xml,添加必要权限:
<!-- 本地存储读取权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 插件要求的基础运行权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
  • 打开MainActivity.cs,在OnCreate方法中初始化插件:
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    CrossMediaManager.Current.Init(this);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
    LoadApplication(new App());
}
// 重写权限申请回调适配运行时权限要求
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
  • 如果音频文件存放在项目Assets目录下,需要将文件的生成操作设置为AndroidAsset,路径前缀改为file:///android_asset/即可正常读取。

4. iOS端专属配置

  • 打开Info.plist,如需后台播放音频则添加如下配置:
<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
</array>
  • 打开AppDelegate.cs,在FinishedLaunching方法中初始化插件:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    CrossMediaManager.Current.Init();
    global::Xamarin.Forms.Forms.Init();
    LoadApplication(new App());
    return base.FinishedLaunching(app, options);
}
  • 如果音频文件存放在项目Resources目录下,需要将文件的生成操作设置为BundleResource,直接传入文件名即可正常读取。

5. 功能调用说明

  • 直接调用共享项目封装的PlayLocalAudio方法,传入本地音频文件名即可播放
  • 可通过CrossMediaManager.Current.Pause()、CrossMediaManager.Current.Stop()方法实现暂停、停止播放控制

注意:如果需要读取应用外部公共存储的音频文件,需要先通过Xamarin.Essentials的Permissions API申请存储读写权限,权限获取成功后再读取路径播放。

内容的提问来源于stack exchange,提问作者Ishaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:39:03