如何在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
相关产品推荐
相关产品推荐

