Android Studio实现音乐盒

本文详细介绍了如何在Android Studio中实现一个音乐播放器应用,包括上一首、播放/暂停、停止、下一首等功能,以及如何显示播放歌曲的简单信息。通过核心代码示例,如MusicService.java和MainActivity.java,展示了如何使用BroadcastReceiver进行组件间通信,以及如何控制MediaPlayer的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Studio实现音乐盒

要求:

实现上一首、播放/暂停、停止、下一首的功能,同时显示播放歌曲的简单信息。

实现界面展示

在这里插入图片描述

按下 下一首
在这里插入图片描述

核心代码

MusicService.java

public class MyReceiver extends BroadcastReceiver{


        @Override
        public void onReceive(Context context, Intent intent) {
            int control = intent.getIntExtra("control",-1);
            switch (control)
            {
                //播放或暂停
                case 1:
                    //原来处于没有播放状态
                    if(status == 0x11)
                    {
                        // 准备 并播放 音乐
                        prepareAndPlay(musics[current]);
                        status = 0x12;
                    }
                    //原来处于播放状态
                    else if (status == 0x12)
                    {
                        //暂停
                        mediaPlayer.pause();
                        //改为暂停状态
                        status = 0x13;
                    }
                    // 原来 处于 暂停状态
                    else if (status == 0x13)
                    {
                        //播放
                        mediaPlayer.start();
                        // 改变状态
                        status = 0x12;
                    }
                    break;
                //停止 播放
                case 2:
                    //如果原来正在播放或暂停
                    if (status == 0x12 || status == 0x13)
                    {
                        // 停止播放
                        mediaPlayer.stop();
                        status = 0x11;
                    }
                    break;
                // 上一首
                case 3:
                    if (status == 0x12 ||status == 0x13)
                    {
                        current = ((current - 1)+ musics.length) % musics.length;
                        prepareAndPlay(musics[current]);
                        status = 0x12;
                    }
                    break;
                // 下一首
                case 4:
                    if (status == 0x12 ||status == 0x13)
                    {
                        current = (current + 1) % musics.length;
                        prepareAndPlay(musics[current]);
                        status = 0x12;
                    }
                    break;
            }
            // 广播通知 Activity 更改图标、文本框
            Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);
            sendIntent.putExtra("update",status);
            sendIntent.putExtra("current",current);
            //发送广播,将被Activity组件中的BroadcastReceiver接收到
            sendBroadcast(sendIntent);
        }
    }
    private void prepareAndPlay(String music){
        // 打开指定音乐文件
        try {
            AssetFileDescriptor afd = assetManager.openFd(music);
            mediaPlayer.reset();
            // 使用MediaPlayer加载指定的声音文件。
            mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            // 准备声音
            mediaPlayer.prepare();
            //播放
            mediaPlayer.start();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

MainActivity.java

public class ActivityReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            // 获取 Intent 中的update消息,update 代表播放状态
            int update = intent.getIntExtra("update",-1);
            // 获取 Intent 中的current消息,current代表当前正在播放的歌曲
            int current = intent.getIntExtra("current",-1);
            if(current >=0)
            {
                title.setText(titleStrs[current]);
                author.setText(authorStrs[current]);
            }
            switch (update)
            {
                //没有 播放状态
                case 0x11:
                    play.setImageResource(R.drawable.play);
                    status = 0x11;
                    title.setText("");
                    author.setText("");
                    break;
                //控制系统进入 播放状态
                case  0x12:
                    //播放状态下设置使用暂停图标
                    play.setImageResource(R.drawable.pause);
                    //设置当前状态
                    status = 0x12;
                    break;
                //控制系统进入暂停状态
                case 0x13:
                    //暂停状态下设置使用播放图标
                    play.setImageResource(R.drawable.play);
                    //设置当前状态
                    status = 0x13;
                    break;
            }
        }
    }

    @Override
    public void onClick(View v) {
        // 创建 Intent
        Intent intent = new Intent("org.crazyit.action.CTL_ACTION");
        switch (v.getId())
        {
            //按下播放/暂停按钮
            case R.id.play:
                intent.putExtra("control",1);
                break;
            // 按下 停止 按钮
            case R.id.stop:
                intent.putExtra("control",2);
                break;
            // 按下 上一首
            case R.id.btnptrack:
                intent.putExtra("control",3);
                break;
            // 按下 下一首
            case R.id.btnntrack:
                intent.putExtra("control",4);
                break;
        }
        // 发送广播 , 将被Service 组件 中的BroadcastReceiver 接收到
        sendBroadcast(intent);
    }

源码:

点击获取源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值