万书网 > 文学作品 > Android从入门到精通 > 第115页

第115页





final  Button  button3  =  (Button)  findViewById(R.id.button3);  //获取“停止”按钮



hint  =  (TextView)  findViewById(R.id.hint);  //获取用于显示提示信息的文本框



file  =  new  File("/sdcard/ninan.mp3");  //获取要播放的文件



if  (file.exists())  {  //如果文件存在



player  =  MediaPlayer



.create(this,  Uri.parse(file.getAbsolutePath()));  //创建MediaPlayer对象



}  else  {



hint.setText("要播放的音频文件不存在!");



button1.setEnabled(false);



return;



}

(5)编写用于播放音乐的play()方法,该方法没有入口参数的返回值。在该方法中,首先调用MediaPlayer对象的reset()方法重置MediaPlayer对象,然后重新为其设置要播放的音频文件,并预加载该音频,最后调用  start()方法开始播放音频,并修改显示提示信息的文本框中的内容,具体代码如下:

private  void  play()  {



try  {



player.reset();



player.setDataSource(file.getAbsolutePath());  //重新设置要播放的音频



player.prepare();  //预加载音频



player.start();  //开始播放



hint.setText("正在播放音频...");



}  catch  (Exception  e)  {



e.printStackTrace();  //输出异常信息



}



}

(6)为MediaPlayer对象添加完成事件监听器,用于当音乐播放完毕后,重新开始播放音乐,具体代码如下:

player.setOnCompletionListener(new  OnCompletionListener()  {



@Override



public  void  onCompletion(MediaPlayer  mp)  {



play();  //重新开始播放



}



});

(7)为“播放”按钮添加单击事件监听器,在重写的onClick()方法中,首先调用play()方法开始播放音乐,然后对代表是否暂停的标记变量isPause进行设置,最后设置各按钮的可用状态,关键代码如下:

button1.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {



play();  //开始播放音乐



if  (isPause)  {



button2.setText("暂停");



isPause  =  false;  //设置暂停标记变量的值为false



}



button2.setEnabled(true);  //“暂停/继续”按钮可用



button3.setEnabled(true);  //“停止”按钮可用



button1.setEnabled(false);  //“播放”按钮不可用



}



});

(8)为“暂停/继续”按钮添加单击事件监听器,在重写的onClick()方法中,如果MediaPlayer处于播放状态并且标记变量isPause的值为false,则暂停播放音频,并设置相关信息;否则,调用MediaPlayer对象的start()方法继续播放音乐,并设置相关信息,关键代码如下:

button2.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {



if  (player.isPlaying()  &&  !isPause)  {



player.pause();  //暂停播放



isPause  =  true;



((Button)  v).setText("继续");



hint.setText("暂停播放音频...");



button1.setEnabled(true);  //“播放”按钮可用



}  else  {



player.start();  //继续播放



((Button)  v).setText("暂停");



hint.setText("继续播放音频...");



isPause  =  false;



button1.setEnabled(false);  //“播放”按钮不可用



}



}



});

(9)为“停止”按钮添加单击事件监听器,在重写的onClick()方法中,首先调用MediaPlayer对象的stop()方法停止播放音频,然后设置提示信息及各按钮的可用状态,具体代码如下:

button3.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {



player.stop();  //停止播放



hint.setText("停止播放音频...");



button2.setEnabled(false);  //“暂停/继续”按钮不可用



button3.setEnabled(false);  //“停止”按钮不可用



button1.setEnabled(true);  //“播放”按钮可用



}



});

(10)重写Activity的onDestroy()方法,用于在当前Activity销毁时,停止正在播放的视频,并释放MediaPlayer所占用的资源,具体代码如下:

@Override



protected  void  onDestroy()  {



if(player.isPlaying()){



player.stop();  //停止音频的播放



}



player.release();  //释放资源



super.onDestroy();



}

运行本实例,将显示一个简易音乐播放器,单击“播放”按钮,将开始播放音乐,同时“播放”按钮变为不可用状态,而“暂停”和“停止”按钮变为可用状态,如图10.1所示;单击“暂停”按钮,将暂停音乐的播放,同时“播放”按钮变为可用;单击“继续”按钮,将继续音乐的播放,同时“继续”按钮变为“暂停”按钮;单击“停止”按钮,将停止音乐的播放,同时“暂停/继续”和“停止”按钮将变为不可用,“播放”按钮可用。



图10.1 简易音乐播放器

10.1.2 使用SoundPool播放音频

由于MediaPlayer占用资源较多,且不支持同时播放多个音频,所以Android还提供了另一个播放音频的类——SoundPool。SoundPool即音频池,可以同时播放多个短小的音频,而且占用的资源较少。SoundPool适合在应用程序中播放按键音或者消息提示音等,在游戏中播放密集而短暂的声音,如多个飞机的爆炸声等。使用SoundPool播放音频,首先需要创建SoundPool对象,然后加载所要播放的音频,最后调用play()方法播放音频,下面进行详细介绍。