从本文开始,详细讲述一个音乐播放器的实现,以及从网络解析数据获取最新推荐歌曲以及歌曲下载的功能。
功能介绍如下:
1、获取本地歌曲列表,实现歌曲播放功能。
2、利用硬件加速感应器,摇动手机实现切换歌曲的功能
3、利用jsoup解析网页数据,从网络获取歌曲列表,同时实现歌曲和歌词下载到手机本地的功能。
4、通知栏提醒,实现仿QQ音乐播放器的通知栏功能.
涉及的技术有:
1、jsoup解析网络网页,从而获取需要的数据
2、android中访问网络,获取文件到本地的网络请求技术,以及下载文件到本地实现断点下载
3、线程池
4、图片缓存
5、service一直在后台运行
6、手机硬件加速器
7、notification通知栏设计
8、自定义广播
9、android系统文件管理
主要技术是这些,其中,利用jsoup解析网络网页,从而获取需要的数据,请参考我的博文: android中使用JSOUP如何解析网页数据详述

下面是最终结果展示:

图一 本地歌曲列表


图二 网络歌曲列表


图三 播放歌曲界面


图四 播放界面歌词显示部分


图五 通知栏展示 播放和下载时的展示

在本地歌曲列表界面长按菜单键可以显示菜单:

在网络歌曲列表中,点击歌曲,可以显示下载和取消菜单项:

基本的界面就是上面的图所展示的。大家觉得还可以的话,就给留个言~~^_^【握手】

下面就开始详细讲述实现细节。首先提一点,播放器中获取的网络歌曲部分,请参看我的博文:android中使用JSOUP如何解析网页数据详述
网络歌曲列表的获取就是利用jsoup从网页抓取数据进行展示的。关于这部分的东西,在本系列博文中不再详细说明了。

关于音乐播放器部分,需要使用到service服务,总共需要两个,一个是音乐播放的service,一个是歌曲下载的service,关于service一直在后台运行的问题,请参考我的博文:实现音乐播放器后台Service服务一直存在的解决思路

根据这篇博文的说明,很容易设计application类的实现,application类实现代码如下:

/*** 2015年8月15日 16:34:37* 博文地址:http://blog.csdn.net/u010156024*/
public class App extends Application {public static Context sContext;public static int sScreenWidth;public static int sScreenHeight;@Overridepublic void onCreate() {super.onCreate();sContext = getApplicationContext();startService(new Intent(this, PlayService.class));startService(new Intent(this, DownloadService.class));WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(dm);sScreenWidth = dm.widthPixels;sScreenHeight = dm.heightPixels;}}

application类中启动了上面的两个service服务,同时获取了手机屏幕的宽和高。手机宽和高是为了后i面设计界面使用的。
有了application之后就可以设计Activity类,首先设计BaseActivity类,把复用的代码放在基类中,子类覆盖或重写BaseActivity中的方法,代码如下:

/*** 2015年8月15日 16:34:37* 博文地址:http://blog.csdn.net/u010156024*/
public abstract class BaseActivity extends FragmentActivity {protected PlayService mPlayService;protected DownloadService mDownloadService;private final String TAG = BaseActivity.class.getSimpleName();private ServiceConnection mPlayServiceConnection = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {L.l(TAG, "play--->onServiceDisconnected");mPlayService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mPlayService = ((PlayService.PlayBinder) service).getService();mPlayService.setOnMusicEventListener(mMusicEventListener);onChange(mPlayService.getPlayingPosition());}};private ServiceConnection mDownloadServiceConnection = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {L.l(TAG, "download--->onServiceDisconnected");mDownloadService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mDownloadService = ((DownloadService.DownloadBinder) service).getService();}};/*** 音乐播放服务回调接口的实现类*/private PlayService.OnMusicEventListener mMusicEventListener = new PlayService.OnMusicEventListener() {@Overridepublic void onPublish(int progress) {BaseActivity.this.onPublish(progress);}@Overridepublic void onChange(int position) {BaseActivity.this.onChange(position);}};/*** Fragment的view加载完成后回调* * 注意:* allowBindService()使用绑定的方式启动歌曲播放的服务* allowUnbindService()方法解除绑定* * 在SplashActivity.java中使用startService()方法启动过该音乐播放服务了* 那么大家需要注意的事,该服务不会因为调用allowUnbindService()方法解除绑定* 而停止。*/public void allowBindService() {getApplicationContext().bindService(new Intent(this, PlayService.class),mPlayServiceConnection,Context.BIND_AUTO_CREATE);}/*** fragment的view消失后回调*/public void allowUnbindService() {getApplicationContext().unbindService(mPlayServiceConnection);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//绑定下载服务bindService(new Intent(this, DownloadService.class),mDownloadServiceConnection,Context.BIND_AUTO_CREATE);}@Overrideprotected void onDestroy() {unbindService(mDownloadServiceConnection);super.onDestroy();}public DownloadService getDownloadService() {return mDownloadService;}/*** 更新进度* 抽象方法由子类实现* 实现service与主界面通信* @param progress 进度*/public abstract void onPublish(int progress);/*** 切换歌曲* 抽象方法由子类实现* 实现service与主界面通信* @param position 歌曲在list中的位置*/public abstract void onChange(int position);
}

下面给出启动界面,启动界面非常简单,延时2秒进入主界面,代码如下:

/*** 2015年8月15日 16:34:37* 博文地址:http://blog.csdn.net/u010156024*/
public class SplashActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// no titlerequestWindowFeature(Window.FEATURE_NO_TITLE);// 全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.splash_layout);// 2s跳转到主界面new Handler().postDelayed(new Runnable() {@Overridepublic void run() {startActivity(new Intent(SplashActivity.this, MainActivity.class));finish();}}, 2000);}
}

以上算是准备工作,有了上面的准备,可以设计主界面和主机面中的两个Fragment了。下面一篇博文讲述主界面的实现。

音乐播放器源码下载


PS:
代码已更新,本地手机没有MP3文件的话,也不会出现崩溃。

android-音乐播放器实现及源码下载(一)相关推荐

  1. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  2. H5音乐播放器(包含源码与示例)

    H5音乐播放器(包含源码与示例) 基于Angular+ionic的H5音乐播放器,源码:https://gitee.com/CrimsonHu/h5-music-player 示例地址 建议使用原版c ...

  3. 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...

  4. 基于QT开发的音乐播放器(附源码)

    基于QT开发的音乐播放器(附源码) 一.简介 1.介绍 2.功能描述 3.系统功能层次模块图 4.各模块功能描述 (1)播放界面 (2)歌词 (3)歌曲信息 (4)歌曲列表 5.文件格式 6.运行环境 ...

  5. android-音乐播放器实现及源码下载(二)

    本系列博文,详细讲述一个音乐播放器的实现,以及从网络解析数据获取最新推荐歌曲以及歌曲下载的功能. 功能介绍如下: 1.获取本地歌曲列表,实现歌曲播放功能. 2.利用硬件加速感应器,摇动手机实现切换歌曲 ...

  6. android-音乐播放器实现及源码下载(四)

    本系列博文,详细讲述一个音乐播放器的实现,以及从网络解析数据获取最新推荐歌曲以及歌曲下载的功能. 功能介绍如下: 1.获取本地歌曲列表,实现歌曲播放功能. 2.利用硬件加速感应器,摇动手机实现切换歌曲 ...

  7. HTML5 可视化音乐播放器(附源码)

    文章目录 一.前言 二.主要功能 三.效果图 四.主要介绍 1.关于原创/来源 2.关于JS原生版 3.关于Layui+jQuery版 五.结语 一.前言 最近某音乐播放器越来越迷,以前下载的本地音乐 ...

  8. 计算机毕业设计android的在线音乐播放器app设计(源码+系统+mysql数据库+Lw文档)

    项目介绍 Android是Google公司公布的基于Linux内核的手机操作系统,其代码属于完全开放,为开源软件开发人员提供使用方便的框架和平台.,本文以Android开发平台为基础,介绍了音乐播放器 ...

  9. 音乐播放器(附源码)

    音乐播放器 刚学编程的时候写了一个音乐播放器,博客中不会粘贴源码,需要的请到我的github下载https://github.com/wangffei/music_player 下面是网站的演示地址, ...

  10. Vue2仿网易云风格音乐播放器(附源码)

    Vue2仿网易云风格音乐播放器 1.整体效果 2.使用技术 3.实现内容 4.源码 5.使用图片 1.整体效果 2.使用技术 使用了HTML5 + CSS3进行页面布局及美化 使用Vue2进行数据渲染 ...

最新文章

  1. 关键字 base 的作用
  2. python123第五周作业答案_马哥2016全新Linux+Python高端运维班第五周作业
  3. 字符串的各种格式转换,C#中自动为数字千位数,百万位数添加逗号
  4. oracle数据库部署策略,Oracle数据库部署实施流程
  5. android 删除特定字符串,android-从改造响应中删除不需要的字符串
  6. atitit.LimeSurvey 安装 attilax 总结
  7. flash swf文件 网页播放功能方案实现
  8. CRMEB二次开发基础接口
  9. matlab 添加文本框textbox
  10. Android十大最新技术,Android十大常用技术揭秘-挑战-挑战
  11. 从asp空间下载apk文件
  12. 微观计量经济学实证分析中的问题
  13. 睿智的目标检测46——Pytorch搭建自己的Centernet目标检测平台
  14. DropdownMenu 下拉菜单的使用
  15. treeset可以重复吗_买了好几份意外险,可以重复理赔吗?
  16. Unity之线性渲染器
  17. Android Studio调用百度地图(二):实现地图显示后台定位和步行导航
  18. VC++6.0 报错error spawning cl.exe解决方法【推荐】
  19. Snowboy 声音识别
  20. Oracle的安装及导入.dmp文件教程

热门文章

  1. luogu 1024
  2. Oracle Database 9i/10g安装后的基本环境与服务
  3. Swift自定义表情键盘+录音
  4. 记服务器被黑客攻击事件(肉鸡)
  5. 蓝桥杯 基础练习 字母图形 JAVA
  6. COleVariant 和 CTime
  7. 《系统之美》读书笔记——下
  8. 将自己电脑设置成无线路由器
  9. 嘴哥有料系列-can教程4:Tbox在整车CAN网络的位置与作用
  10. Discovery Studio | Multi-Site Lambda Dynamics (MSLD) 进行自由能计算