Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。
MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。
而我们今天的例子只是利用MediaPlayer来播放res/raw文件夹中一首非常动听的英文哥love fool.mp3.程序有三个ImageButton按钮,播放,停止,和暂停!
Step 1 :新建一个Android工程,命名为MediaPlayerDemo.
Step 2 :准备素材,在res下建一个raw文件夹,将foollove.mp3导入,将play.png,pause.png,及stop.png导入res/drawable文件夹下.
Step 3: 设计UI布局,在main.xml里放入三个ImageButton(这里可以用AbsoluteLayout,或者RelativeLayout实现)。
出现的问题:
1.
android开发res文件夹下有drawable-hdpi,drawable-mdpi,drawable-ldpi。我如果有一个图片要放里面,应该放到哪个里面?
因为使用Android系统的手机可能采用不同的分辨率,所以在开发的时候会要求有不同分辨率的图片,drawable-hdpi存高分辨率的,drawable-mdpi存中等分辨率的,drawable-ldpi存低分辨率的,所以,你要把相同的图片用图片处理软件处理成不同的分辨率的图片,然后分别保存,当然了,如果你嫌麻烦,也可以在三个目录下保存相同的图片,这样也没有问题,但是不符合开发的初衷。
2.
[2012-01-09 15:04:08 - MediaPlayer] res\raw\Withoutyou.mp3: Invalid file name: must contain only [a-z0-9_.]
出现错误的原因是,最后面的正则表达式:意思是 文件名必须是"小写字母"," 0~9"的数字,下划线" —" 和"."
将Withoutyou改为全都小写,withoutyou就可以了。
3.
相对父控件的对齐属性,值为 true ,如 android:layout_alignParentTop = "true" ,表示该控件与父控件的顶端对齐。
- layout_alignParentTop 与父控件顶部对齐
- layout_alignParentBottom 与父控件底部对齐
- layout_alignParentLeft 与父控件左边对齐
- layout_alignParentRight 与父控件右边对齐
4.
在写
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/white"
android:orientation="vertical"
>
时android:background="@drawable/white"出错的原因是,white没有定义。
于是在res/values下定义color.xml,其中写上如下代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="darkgray">#808080FF </drawable>
<drawable name="white">#FFFFFFFF</drawable>
</resources>
便不会再报错。
5.
如何设定音乐的播放路径呢,很简单,只需把setDataSource()方法改成由create方法来创建的一个指定资源索引的MediaPlayer对象即可,即,mMediaPlayer = MediaPlayer.create(Context context, int resid),在这个方法中,resid是res下新建一个raw文件夹,里面存放歌曲。将resid设定为R.raw.xx,(xx为歌曲名)。
并且返回值为null,表示创建成功。