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,表示创建成功。