Android游戏编程之音频编程(4)

现在编写一个测试活动,用循环模式播放assets/目录下的一个音频文件。该音效将根据活动的生命周期实现暂停和恢复,当活动暂停时,音乐也要暂停;而活动恢复时,音乐也要从上次暂停的地方开始播放。

代码如下:

package org.example.ch04_Android_basics;

import java.io.IOException;

import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.TextView;

public class MediaPlayerTest extends Activity {
 MediaPlayer mediaPlayer;

@Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  TextView textView = new TextView(this);
  setContentView(textView);
 
  setVolumeControlStream(AudioManager.STREAM_MUSIC);
  mediaPlayer = new MediaPlayer();
  try{
   AssetManager assetManager = getAssets();
   AssetFileDescriptor descriptor = assetManager.openFd("music.ogg");
   mediaPlayer.setDataSource(descriptor.getFileDescriptor(),
     descriptor.getStartOffset(), descriptor.getLength());
   mediaPlayer.prepare();
   mediaPlayer.setLooping(true);
  }catch(IOException e){
   textView.setText("Couldn't load music file, " + e.getMessage());
   mediaPlayer = null;
  }
 }

@Override
 protected void onPause() {
  // TODO Auto-generated method stub
  super.onPause();
  if(mediaPlayer != null){
   mediaPlayer.pause();
   if(isFinishing()){
    mediaPlayer.stop();
    mediaPlayer.release();
   }
  }
 }

@Override
 protected void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  if(mediaPlayer != null)
   mediaPlayer.start();
 }
}

在onResume()方法中,我们只需启动MediaPlayer(如果已经成功创建它)。onResume()方法是一个处理该操作的完美地方,因为它在onCreate()方法和onPause()方法之后被调用。在第一种情况下,它将第一次启动播放;在第二种情况下,它将简单地恢复已暂停的MediaPlayer。

在onPause()方法中,我们暂停MediaPlayer。如果该活动被销毁,我们还需要停止该MediaPlayer并释放所有资源。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9f072f294090b1904fc691b842bc1548.html