半年前写了个音乐播放器,仿的是多米的UI界面

之前发表在eoe社区,今天也发到csdn上来

不罗嗦,先上效果图:

下面简单介绍下代码:

MusicPlayer 播放音乐的核心类,该类有以下成员变量

private final static String TAG = "MusicPlayer";

private final String BROCAST_NAME = "com.genius.musicplay.brocast";

private MediaPlayer mMediaPlayer;                   // 播放器对象

private List mMusicFileList;               // 音乐文件列表

private int mCurPlayIndex;                          // 当前播放索引

private int mPlayState;                             // 播放器状态

private int mPLayMode;                              // 歌曲播放模式

private Random mRandom;

private Context mContext;

其实该类就是将MediaPlayer做了一层封装,提供出一些播放音乐的相关操作如播放,暂停,上一曲,下一曲等等

MusicService 是播放音乐的服务继承自service,MediaPlayer作为它的成员变量

所以对MediaPlayer的操作就委托给了MusicService

ServiceManager,管理服务的对象,采用AIDL接口方式实现远程操作,对AIDL熟悉的童鞋你懂得

private final static String TAG = "ServiceManager";

private final static String SERVICE_NAME = "com.genius.service.musicservices";

private Boolean mConnectComplete;

private ServiceConnection mServiceConnection;

private MusicConnect mMusicConnect;

private IOnServiceConnectComplete mIOnServiceConnectComplete;

private Context mContext;

MusicConnect就是AIDL接口对象

MusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicData 音乐歌曲的信息,由于要在AIDL接口传递,所以需要实现Parcelable接口

public class MusicData implements Parcelable{

public final static String KEY_MUSIC_DATA = "MusicData";

private final static String KEY_MUSIC_NAME = "MusicName";

private final static String KEY_MUSIC_TIME = "MusicTime";

private final static String KEY_MUSIC_PATH = "MusicPath";

private final static String KEY_MUSIC_ARITST = "MusicAritst";

public String mMusicName;

public int  mMusicTime;

public String mMusicPath;

public String mMusicAritst;

public MusicData()

{

mMusicName = "";

mMusicTime = 0;

mMusicPath = "";

mMusicAritst = "";

}

@Override

public int describeContents() {

// TODO Auto-generated method stub

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

// TODO Auto-generated method stub

Bundle mBundle=new Bundle();

mBundle.putString(KEY_MUSIC_NAME, mMusicName);

mBundle.putInt(KEY_MUSIC_TIME, mMusicTime);

mBundle.putString(KEY_MUSIC_PATH, mMusicPath);

mBundle.putString(KEY_MUSIC_ARITST, mMusicAritst);

dest.writeBundle(mBundle);

}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator()

{

@Override

public MusicData createFromParcel(Parcel source) {

// TODO Auto-generated method stub

MusicData Data = new MusicData();

Bundle mBundle=new Bundle();

mBundle = source.readBundle();

Data.mMusicName = mBundle.getString(KEY_MUSIC_NAME);

Data.mMusicTime = mBundle.getInt(KEY_MUSIC_TIME);

Data.mMusicPath = mBundle.getString(KEY_MUSIC_PATH);

Data.mMusicAritst = mBundle.getString(KEY_MUSIC_ARITST);

return Data;

}

@Override

public MusicData[] newArray(int size) {

// TODO Auto-generated method stub

return new MusicData[size];

}

};

}

音乐播放模式类

public class MusicPlayMode {

public static final int MPM_SINGLE_LOOP_PLAY = 0;   // 单曲循环

public static final int MPM_ORDER_PLAY = 1;         // 顺序播放

public static final int MPM_LIST_LOOP_PLAY = 2;     // 列表循环

public static final int MPM_RANDOM_PLAY = 3;        // 随即播放

}

音乐播放状态类

public class MusicPlayState {

public static final int MPS_NOFILE = -1;            // 无音乐文件

public static final int MPS_INVALID = 0;            // 当前音乐文件无效

public static final int MPS_PREPARE = 1;            // 准备就绪

public static final int MPS_PLAYING = 2;            // 播放中

public static final int MPS_PAUSE = 3;              // 暂停

public static final String PLAY_STATE_NAME = "PLAY_STATE_NAME";

public static final String PLAY_MUSIC_INDEX = "PLAY_MUSIC_INDEX";

public static final String MUSIC_INVALID = "MUSIC_INVALID";

public static final String MUSIC_PREPARE = "MUSIC_PREPARE";

public static final String MUSIC_PLAY = "MUSIC_PLAY";

public static final String MUSIC_PAUSE = "MUSIC_PAUSE";

public static final String MUSIC_STOP = "MUSIC_STOP";

}

MusicPlayActivity,应用程序主界面,该类代码也最多,不过里面细分了几个内部类,如UIManager里面就包含了很多控件对象以及对它们的操作

private final static String TAG = "MusicPlayActivity";

private final String BROCAST_NAME = "com.genius.musicplay.brocast";

private final static int REFRESH_PROGRESS_EVENT = 0x100;

private final static int ABOUT_DIALOG_ID = 1;

private Handler mHandler;

private UIManager mUIManager;

private ServiceManager mServiceManager;                                 // 本地服务管理

private MusicTimer mMusicTimer;                                         // 检测歌曲进度的定时器

private MusicPlayStateBrocast mPlayStateBrocast;                        // 音乐播放状态的广播接收器

private SDStateBrocast mSDStateBrocast;                                 // SD卡变化接收器

private List m_MusicFileList;                              // 音乐列表

private ListViewAdapter mListViewAdapter;

private boolean mIsSdExist = false;                                     // SD卡是否存在

private boolean mIsHaveData = false;                                    // 是否有音乐文件

private int mCurMusicTotalTime = 0;

private int mCurPlayMode = MusicPlayMode.MPM_LIST_LOOP_PLAY;

MySlidingDrawer,自定义抽屉控件,属于UIManager的一部分

MusicTimer,用于定时获取歌曲进度的定时器

其它的东东就不多说了,有兴趣的童鞋自个儿下代码(有注释)看吧

android+多米音乐+自动播放,android 高仿多米音乐播放器相关推荐

  1. Flutter+FishRedux高仿网易云音乐

    flutter_netease_cloud_music 采用FishRedux框架与开源网易云音乐api开发的高仿网易云音乐APP,技术栈主要是:Flutter+FishRedux,目前主要是偏重AP ...

  2. android高仿酷狗音乐播放器源码下载

    这是一款简单的读取SD卡音乐文件进行播放.暂停.删除.切歌等功能的高仿酷狗音乐播放器. 主要功能: 模块 简要说明 扫描SD卡音乐 扫描SD卡,并显示出本地音乐列表 提供歌词跟随音乐滚动更能   采用 ...

  3. android 仿网易标签切换,高仿网易云音乐客户端的Home页面切换Tabhost-IT蓝豹

    1.高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的, 实现方式,自定义AnimTabsView继承 RelativeLa ...

  4. 【游戏开发创新】手把手教你使用Unity制作一个高仿酷狗音乐播放器,滨崎步,旋律起,爷青回(声音可视化 | 频谱 | Audio)

    文章目录 一.前言 二.获取UI素材 三.使用UGUI制作界面 1.界面布局 2.账号圆形头像 3.搜索框 4.调节UI层 5.黑色按钮悬浮高亮效果 6.纯文字按钮 7.滚动列表自适应 8.歌名与视频 ...

  5. Vue3.0 + typescript 高仿网易云音乐 WebApp

    Vue3.0 + typescript 高仿网易云音乐 WebApp 前言 Vue3.0 的正式发布,让我心动不已,于是尝试用 vue3 实现一个完整的项目,整个项目全部使用了 composition ...

  6. 新鲜出炉高仿网易云音乐 APP

    我的引语 晚上好,我是吴小龙同学,我的公众号「菜鸟翻身」会推荐 GitHub 上好玩的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注我. 项目中成长是最快的,如何成长,就是解决问题 ...

  7. 高仿网易云音乐(vue实战项目)

    高仿网易云音乐(Vue实战项目)

  8. 基于vue的高仿网易云音乐网站,实现大多数功能

    文章目录 前言 项目演示地址 线上地址 项目仓库 总结 前言 基于Vue + Vue-Router + Vuex + axios + elementui,ui参考网易云音乐,后端接口使用网易云音乐接口 ...

  9. Android高仿网易云音乐播放界面

    现在很多的播放器的播放界面都是采用光盘的转动,下面是我仿造网易的播放界面.先上两张图: 第一张为播放前的界面,第二张为点击播放按钮的图片.布局文件如下: <RelativeLayout xmln ...

  10. Android高仿网易云音乐OkHttp+Retrofit+RxJava+Glide+MVC+MVVM

    简介 这是一个使用Java(以后还会推出Kotlin版本)语言,从0开发一个Android平台,接近企业级的项目(我的云音乐),包含了基础内容,高级内容,项目封装,项目重构等知识:主要是使用系统功能, ...

最新文章

  1. wp实例开发精品文章源码推荐
  2. JVM是如何分配和回收内存?有实例!
  3. android中对Toast的简单封装
  4. 数据中心着火,工程师用嘴一吹就灭了?
  5. Linux下查看文件占用空间大小的du 和df 命令
  6. oracle宕机原因排查,oracle不定期的出现宕机的问题诊断
  7. 机器学习之数据不平衡问题
  8. 【零基础 快速学Java】韩顺平 笔记整理(到p170 跑路了)
  9. (2)安装配置开发工具-JsDroid引流脚本混合式开发技术系列教程By飞云脚本学院
  10. 4G 网络跟 5G 的区别
  11. java基础--枚举的运用
  12. 鸿蒙系统支持双系统吗,双系统同台登出,EMUI11+鸿蒙系统2.0,有大招
  13. Ubuntu 台式机 usb WiFi 接收器设置方法
  14. Codeforces - DZY Loves Sequences
  15. android path拆分_Android知识总结——Path常用方法解析
  16. 交易委托账本 order book
  17. 相关性分析热点图_车联网数据分析(二):驾驶行为分析
  18. Lawliet|Python学习笔记1——基础
  19. Android开发之获取通话记录
  20. 下载安装 gSoap

热门文章

  1. ArcGIS Clip(裁剪)时出现000117错误的解决办法
  2. arcgis-把X Y点展到arcgis中的陷阱
  3. 日调度5万亿次,腾讯云微服务架构体系TSF深度解读
  4. java性能优化读书笔记(1)
  5. HikariCP--一款高性能的 JDBC 连接池
  6. 15+ tar command usages with examples – Unix/Linux--reference
  7. Lesson 13.1 深度学习建模目标与性能评估理论
  8. 【推荐系统】推荐系统整体框架概览
  9. 机器学习中的训练集,验证集及测试集的关系
  10. 白话Elasticsearch01- 结构化搜索之使用term query来搜索数据