播放一首歌(MediaPlayer)

使用 Android 内置的 MediaPlayer 播放打包在应用里的音频文件。

1. 引入命名空间

using Android.Media;Code language: CSS (css)

2. 声明 MediaPlayer 字段

MediaPlayer _myPlayer;

3. 新建 Raw 资源文件夹

Resources 目录下新建 raw 文件夹,把音频文件(如 SecretGarden.mp3)放进去。

文件名必须小写、数字、下划线,不能有中文和空格;编译后会自动生成 Resource.Raw.xxx

4. 在 OnCreate 中初始化并绑定按钮播放

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.activity_main);

    // 方式一:页面创建就加载音频,点击按钮直接播放
    _myPlayer = MediaPlayer.Create(this, Resource.Raw.mario);

    Button button = FindViewById<Button>(Resource.Id.myButton);
    button.Click += delegate
    {
        _myPlayer.Start();
    };
}Code language: JavaScript (javascript)

完整 MainActivity 示例

点击按钮时才加载并播放

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using Android.Media;

namespace PlayMusicDemo
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        MediaPlayer _myPlayer;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            Android.Support.V7.Widget.Toolbar toolbar =
                FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

            FloatingActionButton fab = FindViewById<FloatingActionButton>(Resource.Id.fab);
            fab.Click += FabOnClick;

            var btn = FindViewById<Button>(Resource.Id.button1);
            btn.Click += Btn_Click;
        }

        private void Btn_Click(object sender, EventArgs e)
        {
            // 每次点击创建播放器并播放 SecretGarden.mp3
            _myPlayer = MediaPlayer.Create(this, Resource.Raw.SecretGarden);
            _myPlayer.Start();
        }

        private void FabOnClick(object sender, EventArgs e)
        {
            // 浮动按钮逻辑
        }
    }
}Code language: PHP (php)

资源释放(推荐加上)

MediaPlayer 占用系统资源,页面销毁时要释放,避免内存泄漏:

protected override void OnDestroy()
{
    base.OnDestroy();
    if (_myPlayer != null)
    {
        _myPlayer.Release();
        _myPlayer = null;
    }
}Code language: JavaScript (javascript)

总结

  1. MediaPlayer.Create(context, Resource.Raw.xxx):从 raw 资源创建播放器
  2. .Start():开始/继续播放;对应还有 .Pause() 暂停、.Stop() 停止
  3. raw 文件夹下的音频会被打包进 APK,适合短小的音效、背景音乐
  4. 文件名规则:全小写,不能有空格和中文
  5. 用完记得 Release() 释放资源

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注