Android MVC实现一个音乐播放器

MVCPlayer

我尝试在android上使用MVC模式来开发一个音乐播放器。
GitHub地址:https://github.com/skyhacker2/MVCPlayer

什么是MVC

来自维基百科

  1. 控制器 Controller - 负责转发请求,对请求进行处理。
  2. 视图 View - 界面设计人员进行图形界面设计。
  3. 模型 Model - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

那么在android上,Activity就是Controller了。

划分职责

  1. activity负责处理view的事件和获取模型数据并刷新视图。
  2. view只负责显示
  3. model就是数据部分,不能更新view,数据改变必须通过activity更新view。

设计我们的播放器

Models

  1. Music - 代表一首歌曲,有歌名、路径、歌手等信息
  2. MusicPlayer - 播放器,我们的逻辑处理部分。

为什么播放音乐不在Activity里面做呢?

播放音乐是Model的一部分,而不是Activity的一部分。

我认为模型代表what it is?

所以播放器是一个model,我设计一个播放器类来封装播放音乐的逻辑。

MusicPlayer.java

public class MusicPlayer {
    public interface PlayerListener {
        void onPlay();
        void onPause();
        void onResume();
        void onPlayNext();
        void onPlayPrev();
        void onProgressUpdate(int progress);
    }

    private static MusicPlayer sMusicPlayer;
    private List<Music> mPlayList;          // 播放列表
    private boolean mPlaying;               // 是否正在播放
    private int mCurrentIndex;              // 目前播放的位置
    private int mCurrentProgress;           // 播放进度
    private MediaPlayer mMediaPlayer;       // 播放器
    private PlayerListener mListener;       // 监听器
    private Timer mTimer;                   // 计时器
    private int mTotalTime;                 // 播放时间
    public static MusicPlayer getInstance(){...}
    public void play(final int index) {...}
    public void pause() {...}
    public void resume() {...}
    public void playNext() {...}
    public void playPrev() {...}

为了当播放器内部状态改变的时候通知Activity,我定义了一个PlayerListener

Views

视图就是xml文件,没什么好说的了。

Activity

Activity里面包含了视图对象和播放器对象。

首先通过ContentResolver获取手机里面的歌曲,
然后放到播放器里面,同时放到播放列表的adapter里面。

mMusicPlayer = MusicPlayer.getInstance();
mMusicPlayer.setPlayList(getPlayList());
mMusicPlayer.setListener(getPlayerListener());

mMusicListAdapter = new MusicListAdapter(this, getPlayList());
mMusicListView.setAdapter(mMusicListAdapter);

当点击列表时,告诉播放器播放音乐。

mMusicListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        mMusicPlayer.play(position);
    }
});

这时候播放器的状态改变,onPlay方法被调用,通知Activity更新视图:

public MusicPlayer.PlayerListener getPlayerListener() {
    if (mPlayerListener == null) {
        mPlayerListener = new MusicPlayer.PlayerListener() {
            @Override
            public void onPlay() {
                updateUI();
            }

            @Override
            public void onPause() {
                updateUI();
            }

            @Override
            public void onResume() {
                updateUI();
            }

            @Override
            public void onPlayNext() {
                updateUI();
            }

            @Override
            public void onPlayPrev() {
                updateUI();
            }

            @Override
            public void onProgressUpdate(int progress) {
                updateUI();
            }
        };
    }
    return mPlayerListener;
}

整个过程是:View发出action,controller改变model,model通知controller状态改变,controller更新view。

小结

MVC模式使我们更好地设计软件,各部分的职责分工明确。Model和View相对独立,易于更改。例如我不想在Activity里面播放音乐,完全可以把MusicPlayer放到Service上去播放,而且播放代码一句也不用改。

时间: 2024-11-25 03:18:26

Android MVC实现一个音乐播放器的相关文章

Android多媒体框架对音乐播放器的支持

下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些. 1. MediaScannerReceiver 这个广播接收者在接收到ACTION_BOOT_COMPLETED.ACTION_MEDIA_MOUNTED或 ACTION_MEDIA_SCANNER_SCAN_FILE 广播时对SD卡中的图片.音乐和视频文件进行了扫描,因为扫描不能影响用户使用,这里启动了一个服务MediaScannerService,扫描的文件类型如下: /* Audio */ addFileType("MP3&q

Android开发---MediaPlayer简单音乐播放器

Android开发-MediaPlayer简单音乐播放器 功能介绍 实现一个简单的播放器,类似网易云音乐形式,功能包括: 播放.暂停,停止,退出功能: 后台播放功能: 进度条显示播放进度.拖动进度条改变进度功能: 播放时图片旋转,显示当前播放时间功能: 界面样式 功能实现 1. MediaPlayer的实现 MediaPlayer常用方法介绍 MediaPlayer的实现包括初始化MediaPlayer,MediaPlayer的功能实现,包括播放.暂停.停止.离开等,具体细节如下: MediaP

Android基于发展Service音乐播放器

这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activity的界面button或拖动进度条时,系统通过发送广播通知后台Service来改变播放状态和播放指定音乐. 程序执行效果图:         watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3l1emhlbmdmYW4=/font/5a6L5L2T/

【黑马Android】(11)音乐播放器/视频播放器/照相机/常见对话框/notification通知/样式和主题/帧动画/传感器/应用程序反编译与安装

音乐播放器api <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:or

每天看一片代码系列(三):codepen上一个音乐播放器的实现

今天我们看的是一个使用纯HTML+CSS+JS实现音乐播放器的例子,效果还是很赞的: codePen地址 HTML部分 首先我们要思考一下,一个播放器主要包含哪些元素.首先要有播放的进度信息,还有播放/暂停或者上一首下一首等必要的按钮,同时还要显示一些当前播放的音乐名称等信息.播放多首歌曲时,要显示播放列表...因此,从语义上可以构造出基本的HTML结构: // 背景区块,用于显示当前播放音乐的图片 <div class='background' id='background'></di

ios开发:一个音乐播放器的设计与实现

github地址:https://github.com/wzpziyi1/MusicPlauer 这个medo,关于歌曲播放的主要功能都实现了的.下一曲.上一曲,暂停,根据歌曲的播放进度动态滚动歌词,将当前正在播放的歌词放大显示,拖动进度条,歌曲跟着变化,并且使用Time Profiler进行了优化,还使用XCTest对几个主要的类进行了单元测试. 已经经过真机调试,在真机上可以后台播放音乐,并且锁屏时,显示一些主要的歌曲信息. 首页: 歌曲内部播放: 当拖动小的进度条的时候,歌曲也会随之变化.

Android课程---简单的音乐播放器

第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" androi

给博客增加一个音乐播放器特效

我是直接使用网音乐音乐的 我感觉这样比较快一点 把自己喜欢的音乐放进去 生成相应的代码就可以了 具体步骤: 首先:找到网易云音乐官网登录 然后:找到自己喜欢的音乐 旁边有一个生成外链播放器,直接点击进入就会得到: 把下面生成的代码直接复制粘贴到博客里面的公告栏就可以了 至于位置,需要自己来衡量了 上面也说明了很多博客网站不支持嵌入iframe 这个博客园就是不会支持iframe的嵌入 我们需要把iframe更换为:embed  就可以了 有的小伙伴,可能不会只是添加一首歌(举个栗子,我就是这样的

android 教你制作音乐播放器

呵呵,写之前我本人先笑了,欣赏一下我们清爽的界面吧~ 如果是只用activity来制作这样的东西简直是太小儿科了,此处我们当然用的是service 首先我们先上service的代码: 1.如果我们要访问service的属性和方法,那么在activity肯定是以bindservice的方法实现的,而在service中的onbind方法也是必须要实现的,onbind返回的Ibinder对象在activity的serviceconnection中得到使用. 2.activity获取到Ibinder对象