前言
学习完“计算器” “视频播放器” “蓝牙聊天”以后,对安卓应用的开发我们基本上就入门70%了。
现在,我们将在之前学习的基础上,进一步完善我们要掌握的安卓开发技术,开发一个“音乐播放器”。
当完成这个“音乐播放器”应用后,我们对安卓的应用开发就完全的入门,能和大部分安卓开发者侃侃而谈了,当然更重要的是能够开发更多功能全面、复杂的应用程序了。
本文针对的读者是:
- 对安卓开发有了初步认识,但还没有什么经验的新人;
- 对已有的安卓开发经验没有系统化整理的开发者;
在开始以前,假设各位已经做好了如下准备:
- 一台开发用笔记本电脑,并搭建好了开发环境;
- 一部安卓系统设备(手机或平板电脑);
- 设备上存放了可以播放的音乐文件;
- 一根连接电脑和安卓设备的数据线(通常是micro usb数据线);
- 一到两天时间;
- 耐心与求知欲;
第1节 功能规划
音乐是我们日常必备的精神粮食,每个人的手机里面一定会有一个音乐播放器。在坐公交时,它会陪伴着我们;在运动的时候,它会陪伴着我们;睡觉前,它同样会陪伴着我们。
与之前规划产品的思路一样,我们先要做加法,尽可能的把音乐播放器可以拥有的功能挖掘出来;然后再做减法,把不实用、或者投入性价比不高的功能放一放;最后,再根据用户的反馈、加上上一版产品留下的遗憾,进行产品的升级。
让我们把有限的精力集中到最为重要的功能上面去。
1.1 可能的功能点
音乐播放器我们已经见过很多了,它们的功能越来越高级,最早只能播放本地设备上存储的音乐,现在进化的还能够播放网络端端音乐了。
我们就先来为自己的音乐播放器来做个头脑风暴吧,看看它可以拥有哪些功能:
- 展示出本地的音乐文件,并显示该文件的相关信息,例如歌曲名、演唱者、长度、所属唱片、歌曲的封面图片;
- 音乐可以按照演唱者、专辑名称、男女歌手、歌曲类型等信息进行分类,进入每个分类后,按照字母顺序展现歌曲列表;
- 删除选中的本地音乐;
- 播放本地音乐,在播放的过程中,可以停止播放、回复播放、播放下一首、播放上一首、拖动音乐进度条到音乐任意时间点播放;
- 播放时,能显示当前播放音乐的进度,指示播放的时间;
- 播放时,能实时的显示当前歌词;
- 能添加选定的歌曲到播放列表,让播放器播放列表中的歌曲,播放的顺序可以设置顺序播放、单曲循环播放、随机播放等等;
- 音乐播放器等界面退出以后,音乐仍然能在后台播放;再次打开播放器,能显示当前播放的实时信息,例如播放进度条;
- 记录每首音乐的播放历史,下一次播放音乐就从以前播放到的地方继续播放;
- 可以连接到网络,播放网络上的音乐;
- 下载网络上的音乐;
- 让用户标注喜欢的音乐,允许用户给音乐写评论;
- 根据用户的播放历史,为他推荐可能会喜欢的音乐;
- 用户通过音乐来交友
……
可以添加的功能实在是太多了,这个清单实在是不能包含其万一。
1.2 功能的筛选
从上面列出的明细可以看出,能够赋予这个聊天应用的功能实在是太多了,因此我们必须根据我们的能力和精力来进行筛选,做功能的减法。
大体上看,上面的功能清单将功能分成了两块,
- 不需要网络支持的本地播放;
- 需要网络支持的在线播放和网络社交;
加入网络方面的功能是一个很好的想法,不过就目前来说,我们啥也没有,还是先把更为基础简单的功能实现了吧。因此,我们决定先做好本地播放器的功能,其它的以后再说。
在实现本地音乐播放器的过程中,我们也选择避繁就简的原则,对那些不是原则上重要的功能能省就省,做到尽量简单。
1.3 现阶段的功能
根据上面设计的原则,我们来确定音乐播放器的具体功能:
- 展示出本地的音乐文件,并显示该歌曲的封面图片、歌曲名、长度;
- 播放本地音乐,在播放的过程中,可以停止播放、回复播放、播放下一首、播放上一首、拖动音乐进度条到音乐任意时间点播放;
- 播放时,能显示当前播放音乐的进度,指示播放的时间;
- 点击音乐列表中的单个音乐,会将它添加到播放列表中,并立即播放该音乐;
- 长按音乐列表中的单个音乐,进入多选模式,将多选中的音乐作为新的播放列表替换以前的播放列表,并从头开始播放;
- 音乐播放器等界面退出以后,音乐仍然能在后台播放;再次打开播放器,能显示当前播放的实时信息,例如播放进度条;
- 每次启动音乐播放器,播放器装载之前的播放列表,并把列表中的第一首音乐作为默认的首播曲;
- 假如音乐正在播放,启动音乐播放器后,播放器装载之前的播放列表,并把正在播放的音乐作为列表中默认的首播曲;
这里我们再增加一个福利,为音乐播放器增加一个桌面小工具。当它放到桌面上以后,用户能很方便的控制音乐的播放。
在桌面小工具上,可以显示音乐的封面,歌曲的名字,以及控制它的播放、暂停、上一首、下一首。
因此,对视频播放器的界面进行了如下的设计:
整个音乐播放的流程应该是,
- 用户在
MusicListActivity
通过长按,开始选择多首音乐,组成一个播放列表; - 这个播放列表被传递给
MusicService
,MusicService
操作PlayListContentProvider
清空原有的播放列表,然后将这份新的列表存储到PlayListContentProvider
当中; - 用户点击
MusicListActivity
上的播放按钮时,MusicService
开始从播放列表获取第一首曲子开始播放; - 播放的过程中,
MusicService
将当前播放的进度实时更新到PlayListContentProvider
中; - 当播放的音乐有变化(播放完成、切换歌曲、播放进度每秒的变化),
MusicService
都将通知给MusicListActivity
,让其能够同步的改变界面显示; - 播放过程中,
MusicListActivity
能通过调用MusicService
提供的接口控制音乐的暂停、继续、播放上一首、下一首; - 如果用户单独点击音乐列表中的音乐,该音乐将被添加到播放列表中的第一位,并开始播放;
- 当播放到以前播放过的歌曲,将从它曾经停止播放的位置继续播放,如果之前该乐曲被播放完毕,这次播放则从头开始播放;
关于播放的规则是我们自己定义的,如果你有自己的想法,可以在完成音乐播放器的开发后,按照自己的想法修改,做到融会贯通。
1.4 功能条件的假设
我们确定了音乐播放器应该具备的功能,还需要给出实现这些功能的一些基本假设。
设备上可被播放的音频文件很多很多,可能是通话录音,可能是语音记事本,为了简便操作,我们将认为音乐文件都放在包含了
music
关键字的路径当中;设备上已经准备好自带封面的音乐。比如说一首MP3格式的音乐,它所包含的内容并不只是音乐本省,还包括了很多元信息,例如歌曲的作者,歌曲的所属专辑,甚至歌曲的专辑封面图片等很多丰富的信息。只不过我们通常只注意到了MP3格式的音乐本身的音乐内容和文件名字,没有直观的看到其它这些信息。元信息是可选的内容,所以有的音乐文件也没有把对应的信息填充到里面去。不过正版版权到音乐供应商都会注意到这些细节,把与这首音乐更多的信息都提供给大家。
我们这里使用的测试音乐都是通过
网易云音乐
下载的正版歌曲(你也可以去别的渠道下载正版歌曲,作为调试程序时使用的素材),所以基本上会看到歌曲的封面图片。如果没有封面图片,我们会让应用显示默认的封面图片。
1.5 关于遗憾
对于那些没有在这个阶段加入的功能,期待以后加入吧。
对于那些为了简化开发难度、减少开发时间而采用的简单设计,期待在下一版程序中优化和完善吧。
前言
学习完“计算器” “视频播放器” “蓝牙聊天”以后,对安卓应用的开发我们基本上就入门70%了。
现在,我们将在之前学习的基础上,进一步完善我们要掌握的安卓开发技术,开发一个“音乐播放器”。
当完成这个“音乐播放器”应用后,我们对安卓的应用开发就完全的入门,能和大部分安卓开发者侃侃而谈了,当然更重要的是能够开发更多功能全面、复杂的应用程序了。
本文针对的读者是:
- 对安卓开发有了初步认识,但还没有什么经验的新人;
- 对已有的安卓开发经验没有系统化整理的开发者;
在开始以前,假设各位已经做好了如下准备:
- 一台开发用笔记本电脑,并搭建好了开发环境;
- 一部安卓系统设备(手机或平板电脑);
- 设备上存放了可以播放的音乐文件;
- 一根连接电脑和安卓设备的数据线(通常是micro usb数据线);
- 一到两天时间;
- 耐心与求知欲;
第1节 功能规划
音乐是我们日常必备的精神粮食,每个人的手机里面一定会有一个音乐播放器。在坐公交时,它会陪伴着我们;在运动的时候,它会陪伴着我们;睡觉前,它同样会陪伴着我们。
与之前规划产品的思路一样,我们先要做加法,尽可能的把音乐播放器可以拥有的功能挖掘出来;然后再做减法,把不实用、或者投入性价比不高的功能放一放;最后,再根据用户的反馈、加上上一版产品留下的遗憾,进行产品的升级。
让我们把有限的精力集中到最为重要的功能上面去。
1.1 可能的功能点
音乐播放器我们已经见过很多了,它们的功能越来越高级,最早只能播放本地设备上存储的音乐,现在进化的还能够播放网络端端音乐了。
我们就先来为自己的音乐播放器来做个头脑风暴吧,看看它可以拥有哪些功能:
- 展示出本地的音乐文件,并显示该文件的相关信息,例如歌曲名、演唱者、长度、所属唱片、歌曲的封面图片;
- 音乐可以按照演唱者、专辑名称、男女歌手、歌曲类型等信息进行分类,进入每个分类后,按照字母顺序展现歌曲列表;
- 删除选中的本地音乐;
- 播放本地音乐,在播放的过程中,可以停止播放、回复播放、播放下一首、播放上一首、拖动音乐进度条到音乐任意时间点播放;
- 播放时,能显示当前播放音乐的进度,指示播放的时间;
- 播放时,能实时的显示当前歌词;
- 能添加选定的歌曲到播放列表,让播放器播放列表中的歌曲,播放的顺序可以设置顺序播放、单曲循环播放、随机播放等等;
- 音乐播放器等界面退出以后,音乐仍然能在后台播放;再次打开播放器,能显示当前播放的实时信息,例如播放进度条;
- 记录每首音乐的播放历史,下一次播放音乐就从以前播放到的地方继续播放;
- 可以连接到网络,播放网络上的音乐;
- 下载网络上的音乐;
- 让用户标注喜欢的音乐,允许用户给音乐写评论;
- 根据用户的播放历史,为他推荐可能会喜欢的音乐;
- 用户通过音乐来交友
……
可以添加的功能实在是太多了,这个清单实在是不能包含其万一。
1.2 功能的筛选
从上面列出的明细可以看出,能够赋予这个聊天应用的功能实在是太多了,因此我们必须根据我们的能力和精力来进行筛选,做功能的减法。
大体上看,上面的功能清单将功能分成了两块,
- 不需要网络支持的本地播放;
- 需要网络支持的在线播放和网络社交;
加入网络方面的功能是一个很好的想法,不过就目前来说,我们啥也没有,还是先把更为基础简单的功能实现了吧。因此,我们决定先做好本地播放器的功能,其它的以后再说。
在实现本地音乐播放器的过程中,我们也选择避繁就简的原则,对那些不是原则上重要的功能能省就省,做到尽量简单。
1.3 现阶段的功能
根据上面设计的原则,我们来确定音乐播放器的具体功能:
- 展示出本地的音乐文件,并显示该歌曲的封面图片、歌曲名、长度;
- 播放本地音乐,在播放的过程中,可以停止播放、回复播放、播放下一首、播放上一首、拖动音乐进度条到音乐任意时间点播放;
- 播放时,能显示当前播放音乐的进度,指示播放的时间;
- 点击音乐列表中的单个音乐,会将它添加到播放列表中,并立即播放该音乐;
- 长按音乐列表中的单个音乐,进入多选模式,将多选中的音乐作为新的播放列表替换以前的播放列表,并从头开始播放;
- 音乐播放器等界面退出以后,音乐仍然能在后台播放;再次打开播放器,能显示当前播放的实时信息,例如播放进度条;
- 每次启动音乐播放器,播放器装载之前的播放列表,并把列表中的第一首音乐作为默认的首播曲;
- 假如音乐正在播放,启动音乐播放器后,播放器装载之前的播放列表,并把正在播放的音乐作为列表中默认的首播曲;
这里我们再增加一个福利,为音乐播放器增加一个桌面小工具。当它放到桌面上以后,用户能很方便的控制音乐的播放。
在桌面小工具上,可以显示音乐的封面,歌曲的名字,以及控制它的播放、暂停、上一首、下一首。
因此,对视频播放器的界面进行了如下的设计:
整个音乐播放的流程应该是,
- 用户在
MusicListActivity
通过长按,开始选择多首音乐,组成一个播放列表; - 这个播放列表被传递给
MusicService
,MusicService
操作PlayListContentProvider
清空原有的播放列表,然后将这份新的列表存储到PlayListContentProvider
当中; - 用户点击
MusicListActivity
上的播放按钮时,MusicService
开始从播放列表获取第一首曲子开始播放; - 播放的过程中,
MusicService
将当前播放的进度实时更新到PlayListContentProvider
中; - 当播放的音乐有变化(播放完成、切换歌曲、播放进度每秒的变化),
MusicService
都将通知给MusicListActivity
,让其能够同步的改变界面显示; - 播放过程中,
MusicListActivity
能通过调用MusicService
提供的接口控制音乐的暂停、继续、播放上一首、下一首; - 如果用户单独点击音乐列表中的音乐,该音乐将被添加到播放列表中的第一位,并开始播放;
- 当播放到以前播放过的歌曲,将从它曾经停止播放的位置继续播放,如果之前该乐曲被播放完毕,这次播放则从头开始播放;
关于播放的规则是我们自己定义的,如果你有自己的想法,可以在完成音乐播放器的开发后,按照自己的想法修改,做到融会贯通。
1.4 功能条件的假设
我们确定了音乐播放器应该具备的功能,还需要给出实现这些功能的一些基本假设。
设备上可被播放的音频文件很多很多,可能是通话录音,可能是语音记事本,为了简便操作,我们将认为音乐文件都放在包含了
music
关键字的路径当中;设备上已经准备好自带封面的音乐。比如说一首MP3格式的音乐,它所包含的内容并不只是音乐本省,还包括了很多元信息,例如歌曲的作者,歌曲的所属专辑,甚至歌曲的专辑封面图片等很多丰富的信息。只不过我们通常只注意到了MP3格式的音乐本身的音乐内容和文件名字,没有直观的看到其它这些信息。元信息是可选的内容,所以有的音乐文件也没有把对应的信息填充到里面去。不过正版版权到音乐供应商都会注意到这些细节,把与这首音乐更多的信息都提供给大家。
我们这里使用的测试音乐都是通过
网易云音乐
下载的正版歌曲(你也可以去别的渠道下载正版歌曲,作为调试程序时使用的素材),所以基本上会看到歌曲的封面图片。如果没有封面图片,我们会让应用显示默认的封面图片。
1.5 关于遗憾
对于那些没有在这个阶段加入的功能,期待以后加入吧。
对于那些为了简化开发难度、减少开发时间而采用的简单设计,期待在下一版程序中优化和完善吧。
/*******************************************************************/
* 版权声明
* 本教程只在CSDN和安豆网发布,其他网站出现本教程均属侵权。
/*******************************************************************/