半年前写了个音乐播放器,仿的是多米的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接口对象

MusicData音乐歌曲的信息,由于要在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. linux源码共享,Android之高仿飞鸽传书热点创建与共享源码

    这两天,无意中看到飞鸽传书这个小东东,然后又突然对他的wifi热点创建与共享比较感兴趣,于是乎把他的APK给反编译了,很蛋疼的还原了一下他的这一小模块代码,感觉效果差不多,所以跟大家分享一下,下面我们 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 计算机主机组装的过程,电脑主机组装需要怎样的操作流程简单至极?
  2. html5赛车小游戏,html5公路赛车小游戏
  3. rocketmq 消息 自定义_RocketMQ的消息发送及消费
  4. android 自定义控件央视,Android自定义ViewGroup之第一次接触ViewGroup
  5. 哈啰单车涨价:起步价1元/15分钟 仅限北京地区
  6. 【干货】企业如何进行数字化转型及如何称为数据驱动型企业?
  7. DataFrame.apply()
  8. Servlet-请求匹配,创建Servlet的三种方式,API 1
  9. 从零开始学数据库-MySQL
  10. flutter 生命周期源码解析
  11. 几个Gerrit代码检查checkstyle问题总结
  12. 腾讯广告终于迎来全面整合
  13. 2017 ACM Arabella Collegiate Programming Contest(solved 9/13, complex 12/13)
  14. 高可用的“异地多活”架构设计
  15. WiFi认证是如何保证企业WiFi的安全?
  16. 20161012 Python 读书笔记之 输出、循环
  17. ansible自动化运维工具
  18. [白话解析] 深入浅出边缘计算
  19. 第6届蓝桥杯大赛个人赛省赛(软件类)真题\Java语言B组\4
  20. 一键生成PDF文档的书签和目录(书签,目录页带页码 都行)

热门文章

  1. adc0809工作过程C语言,ADC0809的工作原理
  2. [JavaSE](static关键字、继承、super关键字、this关键字、多态、(成员变量、静态成员方法、实例成员方法)在多态中的调用情况)
  3. 区间取点问题 C++实现
  4. 使用JSR303进行参数校验
  5. 下列关于计算机软件的表述 不正确的是,下列关于会计核算软件的表述中,不正确的是()...
  6. 查询湖南计算机二级官网准考证,湖南计算机二级考试准考证打印
  7. 华为od统一考试B卷【迷宫问题】Python 实现
  8. Intrepid 英特佩斯 Vehicle spy vspy3使用
  9. mediawiki 页面的导出和离线浏览
  10. Linux集群管理软件clustershell