Android手机音乐播放器的初步实现
????习惯于在做事情的时候听一些熟悉的歌,你也许会说,这是一心二用,但有的时候却反而更能让人投入自己的工作中。至少对于我来说是这样,当然他人也许无法理解。或许是为了给自己找个正当的理由听音乐,所以做了这个安卓手机的播放器。在此之前由于搭档有意向的是另一个方面,于是在商量之后,我们决定将二者联合起来。当然,这里写的也许不算严格意义上的通信项目,播放器只是项目的一部分而已。下面是播放器的实现过程。
?? 这里利用Android jdk中的MediaPlayer这个类来实现。
?? 先看布局文件:
? ?在这边简单介绍一下。界面没有什么特别的,正是最为normal的一个播放器界面。上左是一个图片框,右面三个按钮。下方三排TextView用于显示歌曲信息,再下面是控制播放的按钮和进度条。
(这里说明一下,图片暂用白色背景代替,音乐播放总时间未获得到是由于本人系统重装,模拟器里的sd卡中无内容导致,与下面的方法无关。)
?
???下面是主界面的activity:
?? 这上面只是一部分。在这里要说的是,用 MediaPlayer.setDataSource(url)的方法来创建播放歌曲时,需执行MediaPlayer.prepare()方法,才能使MediaPlayer.getDuration()方法得到正确的音乐播放时间(未prepare时,该方法也能得到一个long型的整数,但是相对来说很大,这里不是很清楚得到的是什么值);而通过MediaPlayer.create()方法创建则不需要。
?? 下面要说的是控制播放按钮的监听器:??
?? 播放过程中需要另一个线程来同步控制进度条的移动,这里用安卓特有的Handler来控制。
?
? 此外,当玩家拖动进度条时,相应的歌曲进度也将随之匹配变化。
?最后,是一个刷新主线程UI的Handler。Android与普通java工程不同之处的在于,对于一个activity,它自带一个管理主界面的runnable,因此不允许其他的子线程随意刷新主界面。如果你尝试在自定义的线程中刷新界面,则系统会给你报出CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views这个错误。于是我们重新写了handleMessage的方法。
??
?? 这里还有一个无关紧要的方法,也就是把时间的毫秒形式转换成我们习惯的格式。
?到了这里,一个简单的播放器就完成了。这里仅仅是整个项目的一部分,此外还有播放列表和歌曲的选择以及与电脑通信中歌曲的下载等等,这里暂时不写了。
?
厉害啊!2楼正解啊,最好是用自己的照片当专辑封面,假装下是“我的专辑”。哈哈哈!